Yaseen M Ответов: 2

[Решено] как преобразовать int в строку без ошибки?


Решение:
Я изменил сравнение на:
if int(guess[i]) == number[i]:


насыщенная программа:
import random

def generateNumbers():
    numbers = [];
    i = 0
    while i < 4:
        newNumber = random.randint(0, 9)
        if numbers.count(newNumber) == 0:
            numbers.append(newNumber)
            i += 1
    return numbers

def checkValidity(guess):
    if len(guess) != 4:
        print("Your guess does not contain four numbers.")
        return False
    if guess.isdigit() != True:
        print("Your guess is not a number.")
        return False
    i = 0
    while i < 4:
        if guess.count(guess[i]) != 1:
            print("Your number contains a duplicate.")
            return False
        i += 1
    return True

def checkMatch(guess, number):
    bulls = 0
    cows = 0
    i = 0
    while i < 4:
        if guess[i] == number[i]:
            bulls += 1
        elif guess[i] in number:
            cows += 1
        i += 1
    print("Your number contains " + str(bulls) + " and " + str(cows) + " cows.")
    if bulls == 4:
        return True
    else:
        return False

number = generateNumbers()
print(number)
guess = ""
guesses = 0
while guess != "exit":
    print("Enter your guess or 'exit'.")
    guess = input("Guess: ").lower()
    if guess == "exit":
        break
    if checkValidity(guess):
        guesses += 1
        if checkMatch(int(guess), number):
            print("Well done! You guessed the number in " + str(guesses) + " tries.")


Привет, я хочу сравнить два int вместе в следующем коде:
if guess[i] == number[i]:
Однако я получаю следующую ошибку:
TypeError: 'int' object is not subscriptable


Что я уже пробовал:

- Преобразование переменной "guess" в int в разных местах кода.
- Вообще не конвертирую.

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
Это противоречило бы цели исходного кода.

Выполните коррекцию решения 1 и используйте отладчик, чтобы увидеть, что делает ваш код. Где-то ваш код делает не то, что вы ожидаете.

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

Отладчик-Википедия, свободная энциклопедия[^]
27.3. ПДБ — отладчика Python — питон 3.6.1 документации[^]
Отладка в Python | Python покоряет Вселенную[^]
pdb-интерактивный отладчик-Python модуль недели[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
1

OriginalGriff

guess не является [] - поэтому он не может быть использован с индексом подстрочного индекса.
Попробуй:

if guess == number[i]:


Yaseen M

Это противоречило бы цели исходного кода. Что я хочу сделать, так это повторить каждую цифру введенного пользователем числа.