2015-07-18 2 views
0

вот код:Почему мой код работает в IDLE, но не при сохранении файла и двойном щелчке по файлу?

# Critter Caretaker 
# A virtual pet to care for 

class Critter(object): 
    """A virtual pet""" 
    def __init__(self, name, hunger = 0, boredom = 0): 
     self.name = name 
     self.hunger = hunger 
     self.boredom = boredom 

    def __pass_time(self): 
     self.hunger += 1 
     self.boredom += 1 

    @property 
    def mood(self): 
     unhappiness = self.hunger + self.boredom 
     if unhappiness < 5: 
      m = "happy" 
     elif 5 <= unhappiness <= 10: 
      m = "okay" 
     elif 11 <= unhappiness <= 15: 
      m = "frustrated" 
     else: 
      m = "mad" 
     return m 

    def talk(self): 
     print("I'm", self.name, "and I feel", self.mood, "now.\n") 
     self.__pass_time() 

    def eat(self, food = 4): 
     print("Brrupp. Thank you.") 
     self.hunger -= food 
     if self.hunger < 0: 
      self.hunger = 0 
     self.__pass_time() 

    def play(self, fun = 4): 
     print("Whee!") 
     self.boredom -= fun 
     if self.boredom < 0: 
      self.boredom = 0 
     self.__pass_time() 


crit_name = input("What do you want to name your critter?: ") 
crit = Critter(crit_name) 
choice = None 
while choice != "0": 

    print \ 
      (""" 
      Critter Caretaker 

      0 - Quit 
      1 - Listen 
      2 - Feed your critter 
      3 - Play with your critter 
      """) 

    choice = input("Choice: ") 
    print() 

    # exit 
    if choice == "0": 
     print("Good-bye.") 

    # listen to your critter 
    elif choice == "1": 
     crit.talk() 

    # feed your critter 
    elif choice == "2": 
     crit.eat() 

    # play with your critter 
    elif choice == "3": 
     crit.play() 

    # some unknown choice 
    else: 
     print("\nSorry, but", choice, "isn't a valid choice.") 


input("\n\nPress the enter key to exit.") 

Когда я запустил его в режиме ожидания, он работает совершенно нормально, но когда я сохранить файл, и дважды щелкните файл, он не будет побежал правильно. Например, когда я выбираю правильный выбор из «0» - «3», он печатает - «не является допустимым выбором». но даже если это неверный выбор, он должен печатать «Извините, но - не допустимый выбор».

извините за мой английский. Пожалуйста, скажите мне, если вы путаетесь с моим английским языком.

Кстати, я в настоящее время изучаю Python из книги под названием «Программирование на языке Python для абсолютного начинающего» - Майклом Доусоном. Должен ли я закончить эту книгу или я должен найти другой способ узнать Python?

+3

Вы случайно перепутали Python 2 и Python 3? – user2357112

+0

Поместите 'print ('type type', type (choice)' в строке после 'input (« Choice: »)'. Если 'choice' является целым числом, он всегда будет сравнивать не равным строке, поэтому все ваши if elif выражения будут False – msw

+0

@msw Предполагая, что программа предназначена для python 3, 'input()' будет по умолчанию использовать строку – user3636636

ответ

0

Это похоже на то, что у вашей установки IDLE есть другая версия Python по сравнению с той, которая доступна в другом месте.

Одна вещь, которую вы могли бы сделать, это добавить проверку версии в верхней части сценария, чтобы увидеть, какую версию вы используете:

import sys 
print(sys.version) 

Другая вещь, которую вы можете сделать, это попытаться ввести в выборе например, "3" с синтаксисом строки и посмотреть, работает ли он. Если вы используете версию Python 2 при попытке запустить извне IDLE.

Главное, что ломается, если вы переходите от Python 3 к Python 2, является поведением функции input(). Python 3 в input функция является такой же, как raw_input функции в Python 2.

В Python 2 input просто пытается выполнить все, что вы вводите в него, если были действительны код Python. В Python 3 input просто хранит все, что вы ввели как строку.

Таким образом, в Python 2:

choice = input("Choice: ") 
Choice: 3 
print(choice) 
3 

Делает choice быть целым числом 3. Это будет сравнивать ложь в проверках у вас есть, потому что 3 == "3" всегда будут ложными. (Поскольку любое сравнение с целыми числами и струны False)

Однако тот же самый код в Python 3 немного отличается:

choice = input("Choice: ") 
Choice: 3 
print(choice) 
"3" 

Вот код делает то, что можно было бы ожидать. Надеюсь, это объяснит, как будет работать код, который использует Python 3.x в IDLE, и код при запуске Python 2.x не работает.

+0

ничего не работает. Даже если я выберу «3». Могу ли я изменить версию python в командной строке. –

+0

@JohnCruz, какая у вас версия python, когда вы запускаете это из командной строки? Нам нужна эта информация. Перейдите в командную строку и введите 'python', это должно войти в интерактивную оболочку и предоставить вам информацию о версии. – shuttle87

+0

Также посмотрите на это: https://docs.python.org/3/using/windows.html – shuttle87

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