Python3 - Проблемы с определением типа объекта

1

Я должен предисловие к моему вопросу, сказав, что я очень новичок в Python (3 дня), без предварительного опыта программирования, поэтому, если я не сразу пойму ответы, пожалуйста, несите меня. Я использую Python 3.5.3 и пытаюсь выполнить следующее упражнение (https://www.practicepython.org):

Создайте случайное число от 1 до 9 (включая 1 и 9). Попросите пользователя угадать номер, а затем сообщите им, считали ли они слишком низким, слишком высоким или точно правильным. Держите игру до тех пор, пока пользователь не наберет "exit",

До сих пор я получил это:

import random
import sys

value=random.randint(0, 10)
x=value
y=input("I thought of a number between 0 and 100. Try to guess what it was! ")
z=type(y)

if z==int:
    if y<x:
        print("too low!")
    elif y>x:
        print("too high!")
    elif y==x:
        print("right!")
    elif y==z:
        print("thank you for playing!")
        sys.exit(0)
elif z==str:
    if y=="exit":
        print("thank you for playing!")
        sys.exit(0)
    elif y !="exit":
        print("Please write only numbers from 1 to 10 or 'exit'. Thank you.")
else:
    print("Please write only numbers from 1 to 10 or 'exit'. Thank you.")

Я создал переменную "z" для хранения информации о типе ввода, чтобы иметь разные вещи, если это целое число или строка. Я чувствовал, что это было необходимо, потому что у меня было много сообщений об ошибках относительно смешивания str с ints. Я ожидал, что программа определит, написал ли пользователь строку, которая вызовет следующий код:

elif z==str:
    if y=="exit":
        print("thank you for playing!")
        sys.exit(0)
    elif y !="exit":
        print("Please write only numbers from 1 to 10 or 'exit'. Thank you.")

или целое число, где он будет делать это:

if z==int:
    if y<x:
        print("too low!")
    elif y>x:
        print("too high!")
    elif y==x:
        print("right!")
    elif y==z:
        print("thank you for playing!")
        sys.exit(0)

На самом деле, что происходит, когда я пишу ввод, будь то число или слово, я получаю это сообщение: "Пожалуйста, пишите только цифры от 1 до 10 или" выходите ". Спасибо". Я прокомментировал код, относящийся к строкам, и все же получил этот ответ, затем я прокомментировал строковый код и код "else", который заставил его выйти из программы после ввода числа.

В этот момент я пришел к выводу, что программа интерпретирует все входы как строки. Ранее в переменной "y" я написал это так:

int(input("I thought of a number between 0 and 100. Try to guess what it was! "))

Я изменил его на текущую форму строк и целых строк. потому что я получал это сообщение об ошибке при записи "exit":

ValueError: invalid literal for int() with base 10: 'exit'

Любая помощь будет принята с благодарностью.

Показать ещё 1 комментарий
Теги:

2 ответа

2

input() в python всегда возвращает str. Вы не можете это сделать:

int(input("I thought of a number between 0 and 100. Try to guess what it was! "))

Потому что, если пользователь вводит строку, то есть не цифровую, программа не может передать ее в int и, следовательно, выдает ошибку.

Тем не менее вы можете использовать value.isdigit(), чтобы проверить, является ли значение (в строке) допустимым числом или нет, однако вам все равно нужно отдать его в int, чтобы использовать его позже в вашей программе.

Вот рабочая программа.

import random
import sys

value=random.randint(0, 10)
x=value
y=input("I thought of a number between 0 and 100. Try to guess what it was! ")

if y.isdigit():
    y = int(y)
    if y<x:
        print("too low!")
    elif y>x:
        print("too high!")
    elif y==x:
        print("right!")
    elif y==z:
        print("thank you for playing!")
        sys.exit(0)
else:
    if y=="exit":
        print("thank you for playing!")
        sys.exit(0)
    elif y !="exit":
        print("Please write only numbers from 1 to 10 or 'exit'. Thank you.")
  • 0
    Большое спасибо, что нашли время ответить. Я воспользовался вашим советом и соответствующим образом изменил код.
2
int()

принимает значение float или string и делает его целым числом, например, 1.0 ---> 1 "1" ---> 1 и так далее. Когда вы вводите "exit", компьютер должен принять целое число, но, конечно, "exit" не является целым числом, поэтому он возвращает эту ошибку.

Сделать то, что вы хотите, довольно просто.

try:
    a = int(y)
    if a<x:
        print("too low!")
    elif a>x:
        print("too high!")
    elif a==x:
        print("right!")
    elif a==z:# i dont understand what this is doing, but i will leave it
        print("thank you for playing!")
        sys.exit(0)
except ValueError:
   if y=="exit":
       sys.exit(0)
   else:
       print("Please write only numbers from 1 to 10 or 'exit'. Thank you.")

Сторона примечания, в верхней части вы говорите

random.randint(0,10)

но для ввода введите число от 1 до 100

  • 0
    Привет и спасибо за быстрый ответ. Вы правы, моя строка была неверной, она должна читать "между 0 и 10".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню