gpt4 book ai didi

python - 将列表制成散列以比较生成的 pin 码?

转载 作者:行者123 更新时间:2023-11-28 20:57:50 25 4
gpt4 key购买 nike

我正在制作一款破解密码的游戏。我想要它,所以它可以是从 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 个数字组合成一个哈希值或任何所谓的哈希值?

最佳答案

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

  • 无论内容如何,​​单个整数永远不会等于列表
  • int() 不保留前导 0 字符; int('0999') 返回 999int('0000') 返回 0

将您的输入和 secret 保存为字符串,这样您就可以保留领先的 0 。使它们成为同一类型,因此生成单个字符串,而不是整数列表。

您的密码可以通过选择字符串数字生成:

digits = '0123456789'  # or use from string import digits

pin = ''.join([random.choice(digits) for _ in range(4)]) # 4 random digits, one string

然后针对该 pin 测试 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 ;散列在这里没有用,因为你想测试相等性,而不是试图将大量的潜在值减少到一组有限的选项(比如试图将任意值放入一个有限大小的表中,或者将一个大的到可以处理这些连接的有限数量的服务器的传入连接数。

关于python - 将列表制成散列以比较生成的 pin 码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52271910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com