如何比较用户输入的密码与随机挑战响应密码相匹配?

问题描述 投票:0回答:1

我正在创建一个代码,要求用户输入下面随机生成的 1 到 3 之间的数字字符串中的数字作为密码。

例如,

引脚:0 1 2 3 4 5 6 7 8 9

跑:1 2 2 3 1 2 1 3 2 1

如果用户的密码是56789,则需要输入21321

import random

# Store the actual PIN as a list of integers
pin = [5, 6, 7, 8, 9]

# Generate random numbers for digits 0 to 9
randNumbers = [random.randint(1, 3) for x in range(10)]

# Create lists to map random numbers to digits
random_to_digit = [None, '0', '1', '2']

# Output digits 0-9 in a single line
print("PIN:", end=' ')
for i in range(10):
    print(i, end=' ')

# Output the corresponding random digits below in a single line
print("\nNUM:", end=' ')
for i in range(10):
    print(random_to_digit[randNumbers[i]], end=' ')

# Request and get the input response from the user
pwdEntry = input("\nPlease enter your converted password: ")

if pwdEntry[0] == randNumbers[5] and pwdEntry[1] == randNumbers[6] and pwdEntry[2] == randNumbers[7] and pwdEntry[3] == randNumbers[8] and pwdEntry[4] == randNumbers[9]:
    print("success")
else:
    print("failure")

我尝试将用户输入的每个项目与列表中他们需要输入的正确数字的位置进行比较,因为密码 56789 是不变的,但它总是会导致失败。

python list random compare
1个回答
0
投票

使用一个 list,而不是 randNumbersrandom_to_digit

并且,考虑到 "PIN" 值是有序的,只需使用数字作为 randNumbers 的索引。

这是一个例子。

import random as r
print('PIN:  ' + ' '.join(map(str, range(10))))
rn = [str(r.randint(1, 3)) for i in range(10)]
print('NUM:  ' + ' '.join(rn))
s = input("Please enter your converted password: ")
a = [5, 6, 7, 8, 9]
valid = True
for i in range(len(s)):
    if rn[a[i]] != s[i]:
        valid = False
        break
if valid:
    print("success")
else:
    print("failure")

输出

PIN:  0 1 2 3 4 5 6 7 8 9
NUM:  1 2 1 2 2 1 3 2 1 1
Please enter your converted password: 13211
success
PIN:  0 1 2 3 4 5 6 7 8 9
NUM:  1 1 2 3 1 2 2 3 3 1
Please enter your converted password: 12345
failure
© www.soinside.com 2019 - 2024. All rights reserved.