У вас есть список целых чисел, и вы сравниваете его с одним целым числом. Это не работает по двум причинам:
- отдельные целые числа никогда не равны списку, независимо от содержимого
int()
не сохраняет начальные 0
символы; int('0999')
возвращает 999
, int('0000')
возвращает 0
.
Сохраните свой ввод и свой секрет в виде строк , чтобы вы могли сохранить ведущий 0
. Сделайте их одинаковыми, поэтому создайте одну строку, а не список целых чисел.
Ваш секретный пин-код может быть сгенерирован путем выбора строковых цифр:
digits = '0123456789' # or use from string import digits
pin = ''.join([random.choice(digits) for _ in range(4)]) # 4 random digits, one string
, затем протестируйте значение input()
для этого вывода:
usrinp = input('')
if usrinp == pin:
# ...
Примечание: вы могли бы выбрать также одно случайное целое число с random.randint(0, 9999)
, но тогда вам было бы сложнее сказать игроку, получили ли они некоторые из цифры правильные. Вместо этого, сгенерировав строку, можно, например, подсчитать, сколько цифр у них было правильно:
if usrinp == pin:
print('Cracked!')
else:
correct_count = 0
for pindigit, userdigit in zip(pin, usrinp):
if pindigit == userdigit:
correct_count += 1
print('Sorry, not the right pin, but you guessed",
correct_count, 'digits correctly!')
Вы можете добиться того же с двумя целыми числами, но тогда вам придется использовать математические или строковые преобразования, чтобы извлечь каждую цифру и правильно обрабатывать значения с ведущими нулями. Все становится немного сложнее.
Другой альтернативой является преобразование пользовательского ввода в отдельные целые числа (поэтому сохраните исходный сгенерированный список целых чисел):
userinp = [int(digit) for digit in input('')]
, но если вы не планируете использовать цифры в арифметике (суммирование, умножение и т. Д.), В этом подходе нет реального преимущества перед использованием строк. Оба списка и строки представляют собой последовательности, но генерации строк избавляет вас от необходимости обрабатывать пользователей, которые упорно ввести 'Your mamma is a <censored>'
каждый раз, когда они играют свою игру и нарушают int()
преобразования. : -)
Ничего из этого не требует хеширования ; хеширование здесь бесполезно, потому что вы хотите проверить на равенство, не пытаясь свести большое количество потенциальных значений к ограниченному набору параметров (например, пытаясь поместить произвольные значения в таблицу ограниченного размера, или направить большой количество входящих подключений к ограниченному количеству серверов, которые могут обрабатывать эти подключения).