Явная ошибка преобразования базовых целых чисел

#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):