use=input('what do you wanna do \n1.press w to create a new file\n2.press r to read a file:\n')
if use=='r':
read()
elif use=='w':
write()
else :
print('OOPS! you enter a wrong input\n')
user()
当我使用IDLE运行此代码时它运行正常但是当我使用cx_freeze创建此python文件的exe时,if和elif条件分别不适用于'r'和'w'。对于任何输入,它总是转到else语句。
我正在使用python 3.2和cx_freeze 3.2
答案 0 :(得分:2)
只是为了快速测试,我这样做了:
use = input("test input here: ")
for i in use:
print(ord(i))
结果,如果你键入" hello",是hello的ascii字符代码,再加上" 13"。这是返回字符\r
,它将被添加到您的字符串中。这在Linux下并不会发生,并且是因为Windows上的换行符为\r\n
,而不是\n
。
您的解决方法是执行以下操作:
use = input("test input: ").strip("\r")
strip()
是一个字符串对象方法,它会从字符串的结尾处开始删除字符。
注意:
ord()
可能不是最佳做法 - 请参阅Unicode。print()
或input()
- 在Windows上,标准输入/输出句柄根本不存在GUI应用程序。用cx_freeze + gui代码把我绊倒了一会儿。当你到达那里时,请注意。