Проблема с целым числом в Python 3.1 - PullRequest
1 голос
/ 18 января 2011

Моя проблема в строке 13 (еще). Я получаю сообщение об ошибке "неверный синтаксис"

Answer = 23
Guess = ()
Gender = input("Are you a boy, a girl or an alien? ")

if Gender == 'boy' or 'Boy':
     print("Nice!", Gender)
if Gender == 'girl' or 'Girl':
     print("Prepare do die!", Gender)
if Gender == 'alien' or 'Alien':
     print("AWESOME my", Gender, "Friend!")   
 while 'Guess' != Answer:
if Guess < Answer:
     print("Too low! try again")
    else:
        print("too high")

Ответы [ 3 ]

4 голосов
/ 18 января 2011

Ваша проблема - отступ. if должен соответствовать else. У вас также, кажется, есть пробел перед while, который должен идти.

if Guess < Answer:
     print("Too low! try again")
    else:
        print("too high")

должно быть

if Guess < Answer:
    print("Too low! try again")
else:
    print("too high")

Gender == 'boy' or 'Boy' не делает то, что вы ожидаете. Поскольку Boy оценивается как true, оно будет эквивалентно просто Gender == 'boy'. Вы, вероятно, хотите Gender == 'boy' or Gender == 'Boy', который можно упростить до Gender.lower() == 'boy', если вы в порядке, принимаете любой случай.

Вы, вероятно, также хотели прочитать ответ до и в цикле while.

Вы также должны следовать принятому Руководству по стилю Python и использовать строчные слова, разделенные подчеркиванием, для имен переменных, например, gender вместо Gender. Используйте Gender для имен классов.

0 голосов
/ 18 января 2011

Вот (почти) правильная программа с моими комментариями:

# The recommended style for Python is to use CamelCase for classes only:
answer = 23 
guess = None # An empty tuple () works to, but this makes more sense.
gender = input("Are you a boy, a girl or an alien? ")

# Using gender.lower() means both 'Boy', 'boy', 'BOY' or 'boY' matches:
if gender.lower() == 'boy':
    print("Nice!", gender)
# Although you can do it like this too:
if gender in ('girl' or 'Girl'):
    print("Prepare do die!", gender)
# But this is *always* true, so it's wrong. I left this bug in intentionally:
if gender == 'alien' or 'Alien': 
    print("AWESOME my", gender, "friend!")

# 'guess' == answer will always be false. Remove the quotes:
while guess != answer:
    # And you forgot to ask for the guess...
    guess = int(input("Guess my age? "))

    # Indentation matters in Python:
    if guess == answer:
        print("Yeah, correct!")
    elif guess < answer:
        print("Too low! try again")
    else:
        print("too high")

Это приводит к следующему:

Are you a boy, a girl or an alien? Why, yes, I am.
AWESOME my Why, yes, I am. friend!
Guess my age? 20
Too low! try again
Guess my age? 30
too high
Guess my age? q
Traceback (most recent call last):
  File "untitled-1.py", line 19, in <module>
    guess = int(input("Guess my age? "))
ValueError: invalid literal for int() with base 10: 'q'

Как видите, проверка вашего ввода - хорошая идея. :) Но это следующий шаг.

0 голосов
/ 18 января 2011

Этот код имеет серьезные проблемы с использованием or и с разницей между строками и переменными. Это то, что вы хотите?

Answer = 23
Guess = None
Gender = raw_input("Are you a boy, a girl or an alien? ")

if Gender in ('boy', 'Boy'):
     print("Nice!", Gender)
elif Gender in ('girl', 'Girl'):
     print("Prepare do die! %s" % Gender)
elif Gender in ('alien', 'Alien'):
     print("AWESOME my %s Friend!" % Gender)
while Guess != Answer:
    Guess = raw_input('Guess the number: ')
    try:
       Guess = int(Guess)
    except ValueError:
        print('Not an integer')
        continue
    if Guess == Answer:
        print('Alright!')
        break
    elif Guess < Answer:
        print("Too low! try again")
    else:
        print("too high")
...