2012-01-19 2 views
0
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 то если и Элиф условие не работает «г» и ' w 'соответственно. для любого ввода он всегда переходит в инструкцию else.ех создан при cx_freeze не работает должным образом

Я использую Python 3.2 и cx_freeze 3.2

+1

Добавить 'print (repr (use))' после 'input()', чтобы вы могли видеть * актуальное * содержимое 'use'. –

ответ

2

Просто для быстрой проверки, я сделал это:

use = input("test input here: ") 

for i in use: 
    print(ord(i)) 

Результат, если вы наберете в «привет», является ASCII-коды символов для привет, плюс «13». Это \r, символ возврата, который добавляется к вашей строке. Этого не происходит в Linux и является результатом того, что в Windows новая строка - \r\n, а не только \n.

Обходной для вас было бы сделать что-то вроде:

use = input("test input: ").strip("\r") 

strip() является метод объекта строки, который будет удалять символы с конца и начала строк.

Примечания:

  1. Использование ord() в приведенном выше примере, вероятно, не лучшая практика - см Unicode.
  2. Если вы когда-либо писали графические интерфейсы и использовали cx_freeze, не используйте print() или input() - на Windows стандартные дескрипторы ввода/вывода вообще не существуют для графических приложений. Это немного сработало с кодом cx_freeze + gui. Просто заметьте, когда вы доберетесь туда.
+0

Он отлично работал с помощью strip(). благодарит за ценную заметку. –

Смежные вопросы