把列表做成散列来比较生成的pin码?

2024-04-26 11:57:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一个你破解密码的游戏。我要它可以是0000到9999之间的任何代码。我做了这个剧本。你知道吗

from random import *
from time import sleep
pin = [randint(0,9),randint(0,9),randint(0,9),randint(0,9)]
print(pin)
usrinp = int(input(''))
if int(usrinp) == pin:
  print('cracked')

问题是,当我输入代码时,它不工作,因为没有输出。有没有办法把这4个数字组合成一个散列或其他什么名字?你知道吗


Tags: 代码fromimport游戏密码inputtimepin
3条回答

这是因为您正在将整数值与列表进行比较。你知道吗

import random
from time import sleep
pin = 1000*randint(0, 9) + 100*randint(0, 9) + 10*randint(0, 9) + randint(0, 9)
print(pin)
usrinp = int(input(''))
if usrinp == pin:
  print('cracked')

这应该工作,如果你的pin码总是将是4位数字,而不是那些与前导零。你知道吗

要获得四位整数,请使用以下命令:

pin = randint(0, 9999)

因此产生的代码是:

from random import *
from time import sleep
pin = randint(0, 9999)
print('%04d'%pin)  # print with leading zeros
usrinp = int(input(''))
if usrinp == pin:
  print('cracked')

您有一个整数列表,并将其与单个整数进行比较。这不起作用有两个原因:

  • 单整数永远不等于一个列表,不管它的内容是什么
  • int()不保留前导0字符;int('0999')返回999int('0000')返回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()转换。:-)

所有这些都不需要hashing;哈希在这里没有任何用处,因为您希望测试是否相等,而不是尝试将大量的潜在值减少到一组有限的选项中(例如尝试将任意值放入一个有限大小的表中,或者将大量传入连接定向到可以处理的有限数量的服务器)这些联系)。你知道吗

相关问题 更多 >