在我班上我们正在研究python 2.7。我正在使用vscode来测试练习。
练习1:读取用户输入并打印长度。如果用户写出退出程序完成。
我的代码如下:
myexit=False
while (myexit!=True):
#read user input
txt=raw_input("write a string or write exit to go out: ")
#print the user input string
print txt
if (str(txt)=='exit'):
myexit=True#exit from while
else:
print len(txt) #print the string length
print "finish"
当我测试代码时,我总是得到字符串+1的长度
例如:如果我写foo,输出是4而没有3.当我写退出时,我不会从while出去,输出是5。
哪里错了?
我错过了一个模块?
谢谢你的帮助
我不确定为什么会发生这种情况,我无法访问Windows机器进行测试/验证,但根据上面的评论,看来在你使用的python版本上,raw_input
只剥离换行符(\n
)而不是回车(\r
)。 Windows使用\r\n
而unix使用\n
。当原始输入返回时,\r
仍然在字符串上,因此额外的char。 cli上一个有用的调试技术是在值上使用函数repr()
来查看它的确切表示方式。这有助于在字符串中找到任何杂散控件或不可见的字符。
函数rstrip()
将从字符串的右侧删除所有空格,在这种情况下应该安全地删除流浪的\r
。如果此代码在类似系统的* nix上运行也应该是安全的,因为rstrip()
只会删除空格(如果存在)。你也可以指定一组char来剥离,所以如果你想要迂腐,你可以使用rstrip("\r")
。
txt=raw_input("write a string or write exit to go out: ").rstrip("\r")
应该修复问题,同时仍然保持不同版本的兼容性。