2016-02-12 1 views
-2
import random 
print("Welcome to RNG Guesser!\n") 
gld = random.randrange(1,10) 
counter = 0 
ccounter = 0 

while True: 
    print("Number of tries: {}".format(counter)) 
    print("Number of correct guesses: {}".format(ccounter)) 

num = input("Enter a number: ") 

if num is "exit": 
    print("Number of tries: {}".format(counter)) 
    print("Number of correct guesses: {}".format(ccounter)) 
    break 
else: 

    if int(num) is gld: 
     print("Congratulations, your guessed number {} was right!".format(num)) 
     counter += 1 
     ccounter += 1 

    elif int(num) < gld: 
     print("Pick a higher number!") 
     counter += 1 

    else: 
     print("Pick a lower number!") 
     counter += 1 

Почему я получаю «неверный литерал для int», когда я набираю exit? Я попытался преобразовать входную переменную в int, я попробовал с выражением else, я попытался сделать 2 переменные, одну для строки для int, и никто из них не работал.Получение «неверного литерала для int с базой 10» в Python

+2

Оператор сравнения '==', а не 'is'. –

ответ

0

Я считаю, что вопрос от линии: if num is "exit"

оценивает в False и далее вниз сценарий, когда Python пытается преобразовать символьной строки exit к междунар, он потерпит неудачу.

Попробуйте заменить is с ==

Проблема в том, что is сравнивает два объекта, чтобы увидеть, если они совпадают, в то время как то, что хотят, чтобы увидеть, если значения объектов, TOW являются одинаковыми. Проверьте это stack overflow thread для получения дополнительной информации.

0

Предполагая, что неправильные отступы в вопросе просто копипасты ошибка ... Попробуйте это:

x = input('enter x > ') 
print('x == "exit": {}'.format(x == "exit")) 
print('x is "exit": {}'.format(x is "exit")) 

Вот что происходит:

enter x > exit 
x == "exit": True 
x is "exit": False 

Или, может быть:

x is "exit": True 

Оператор is сравнивает объект identity, но вы пытаетесь сравнить содержимое двух строк.

+1

Предполагая, что отступ правилен, его код застрял бы в бесконечном цикле. –

+0

Я имею в виду «предполагая, что ваш отступ правилен, в отличие от отступов в вопросе». Тем не менее, это не был бы бесконечный цикл, если бы он был отступом, как вопрос - это было бы «SyntaxError». –

0

Обратите внимание, что строку с нечисловыми символами нельзя присвоить int().

В настоящее время num должен быть str, и это может быть что угодно от ввода пользователем. Также обратите внимание, что если вы хотите оценить два значения, используйте == вместо is. is предполагается использовать в качестве суждения, если две вещи являются одним и тем же объектом.

Если вы хотите использовать, если-то еще, попробуйте это:

if num == "exit": 
    print("Number of tries: {}".format(counter)) 
    print("Number of correct guesses: {}".format(ccounter)) 
    break 
elif not num or not all(char.isdigit() for char in num): 
    print("You are not giving a number.") 
else: 
    if int(num) == gld: 
     print("Congratulations, your guessed number {} was right!".format(num)) 
     counter += 1 
     ccounter += 1 

    elif int(num) < gld: 
     print("Pick a higher number!") 
     counter += 1 

    else: 
     print("Pick a lower number!") 
     counter += 1 

Здесь all(char.isdigit() for char in num) проверяет для каждого символа в num, чтобы увидеть, если они все номера. Мы должны знать, что во входе пользователя может появляться что угодно. Только цифры могут быть преобразованы в int.

У нас есть другое решение, которое более понятно и просто. Возможно, вам придется прочитать некоторые документы по адресу try...except... в Python.

try: 
    if int(num) ... 
except ValueError: 
    # num is not able to be converted to int 
    print("You are not giving a number.") 
+0

Проверка 'all (char.isdigit() для char num)' неправильно принимает пустые строки. Легкий способ исправить это - просто использовать 'try: ... int (num) ...кроме ValueError: ' –

+0

@DietrichEpp Да, вы правы, я хотел предоставить решение, используя' try ... except', но, наконец, придерживался структуры, которую он использовал. Я отредактирую ответ. –

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

  • Нет связанных вопросов^_^