2011-01-17 3 views
1

Моя проблема в строке 13 (иначе). Я получаю сообщение об ошибке «Недействительный синтаксис»Проблема с целым числом в Python 3.1

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") 
+2

Вам не хватает части, которую вы действительно запрашиваете у пользователя для номера. Прочитайте, как читать консольный ввод. –

+0

С этим скриптом действительно много проблем. Но в чем проблема, на которую вы смотрите? – Keith

+0

Я новый для программирования, поэтому я не знаю много об этом. Но это должна быть игра с угадыванием. Я получаю ошибку (недопустимый синтаксис) на «else». im не уверен, как им следует это понимать :( – Jonathan

ответ

4

Ваша проблема в отступлении. 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', если вы согласны с любым кейсом.

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

Вы также должны следовать принятому Python style guide и использовать слова нижнего регистра, разделенные символами подчеркивания для ваших имен переменных, например. gender вместо Gender. Для имен классов используйте Gender.

+0

Спасибо всем, помогли мне много! – Jonathan

0

Этот код имеет серьезные проблемы с использованием 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") 
0

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

# 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' 

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

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