#python #typeerror
#python #Ошибка типа
Вопрос:
Я только что провел последний час, делая то, что вы видите под собой. Это своего рода первый проект, в котором я на самом деле использую материал из своей головы. Все, что я видел в Интернете об этой проблеме, я действительно не понимал, потому что я действительно понятия не имею, что происходит. Я вроде как пропустил много фундаментальных вещей, но у меня такое чувство, что я неправильно работаю с функциями. Может кто-нибудь, пожалуйста, объяснить, где мой код пошел не так?
Код:
import random
uname = input("Whats up! What is your username? ")
print("Hiya " uname ". Cool name ;)")
global guess_loop
def game():
question = None
invalid_input = False
question = input("Would you like to play my epic guessing game??? [Y/N]")
if question != "Y" or "N":
invalid_input: bool = True
if question == "N":
print("Fine then I didnt wanna play it with you anyway!")
if question == "Y":
guess_loop()
if invalid_input == True:
print("Oops its seems you've input a invalid character. Please answer with a uppercase "Y" or "N"")
question = None
game()
global tries
def guess_loop():
global guess_loop
random_number = random.randint(1, 10)
invalid_input2 = True
guess = int(input("Awesome lets play! Ive picked a number beetween one and ten. Try to guess it!"))
if guess is not int(1, 11):
invalid_input2 = True
if guess > random_number:
tries = 1
int(input("Too low! guess higher!" f" This is your {tries}th try!"))
guess_loop()
if guess > random_number:
tries = 1
int(input("Too high! guess lower!" f" This is your {tries}th try!"))
guess_loop()
if guess == random_number:
new_game = input(f"Congratulations {uname} you won! Would you like to play again? [Y/N]")
if new_game != "Y" or "N":
invalid_input: bool = True
if new_game == "N":
print("Fine then I didnt wanna play it with you anyway!")
if new_game == "Y":
guess_loop()
while invalid_input == True:
print("Oops its seems you've input a invalid character. Please answer with a uppercase "Y" or "N"")
guess_loop()
while invalid_input2 == True:
print("Oops its seems you've input a invalid character. Please answer with a number between 1 and 10")
guess_loop()
game()
Вывод:
Whats up! What is your username? R33
Hiya R33. Cool name ;)
Would you like to play my epic guessing game??? [Y/N]Y
Awesome lets play! Ive picked a number beetween one and ten. Try to guess it!1
Traceback (most recent call last):
File "88888", line 58, in <module>
game()
File "88888", line 18, in game
guess_loop()
File "88888", line 32, in guess_loop
if guess is not int(1, 11):
TypeError: int() can't convert non-string with explicit base
Комментарии:
1.
int(1, 11)
недопустимое использованиеint
функции. Вы имеете в виду что-то вродеif not 1 <= guess < 11:
?2.
I've kinda skipped over a lot of fundamental stuff
тогда я бы рекомендовал не делать этого, а вернуться и изучить, что вы делаете. Ввод кода без его понимания называется программированием культа груза . Я говорю это, потомуint(1, 11)
что это не имеет смысла; вы не можете преобразовать кортеж из двух целых чисел только в целое число, и я не знаю, почему вы все равно хотите это сделать.3. @RandomDavis Все онлайн-уроки, которые я просматривал, мучительно, мучительно медленные или просматривают много материала. Я просто решил вместо этого поискать проблему программирования и попытаться сделать это по-своему. Я думаю, что если единственное, что я не могу отладить, это одна крошечная ошибка, то мой подход был несколько успешным.
4. Выполнение @r_33 — определенно лучший способ учиться, просто такая «небольшая ошибка» указывает на то, что вы пропустили много базовых, фундаментальных знаний, поэтому я сказал то, что сделал.
Ответ №1:
int()
функция не выполняет повторную обработку списка так, как вы намеревались его использовать. Возможно, вы захотите изменить if guess is not int(1, 11)
, на if guess not in range(1,11)
который возвращает итератор и фактически проверяет guess
, не находится ли он в этом диапазоне!
Комментарии:
1.
range(1,11)
не возвращает итератор. Он возвращает объект диапазона.2. И это важно, потому что не нужно перебирать все значения, когда вы выполняете тест на членство
in
.3. это не работает. Все возвращается обратно как invalid_integer .
4.
if guess <= 0 or guess >= 11:
вроде работает, но по какой-то причине1
не работает. У меня сейчас нет времени, чтобы разобраться в этом, я иду спать, лол
Ответ №2:
Я вроде как пропустил много фундаментальных вещей
Вот ваша проблема. Вам действительно следует замедлиться и использовать хороший онлайн-учебник, чтобы сначала понять основные вещи.
Ошибка
int() не может преобразовать нестроковое значение с явным основанием
сообщает вам, что int()
функция при вызове с двумя аргументами ожидает, что первый будет строкой, а второй — целым числом, задающим базовое значение
Вероятно, вы хотели проверить, находится ли guess
значение между 1 и 10, для чего вам нужно сделать:
if 1 <= guess <= 10:
или
if guess in range(1, 11):