为了账号安全,请及时绑定邮箱和手机立即绑定

列表制成散列以比较生成的密码?

列表制成散列以比较生成的密码?

qq_花开花谢_0 2021-06-04 05:00:32
我正在制作一款您可以破解密码的游戏。我想要它,所以它可以是从 0000 到 9999 的任何代码。我制作了这个脚本。from random import *from time import sleeppin = [randint(0,9),randint(0,9),randint(0,9),randint(0,9)]print(pin)usrinp = int(input(''))if int(usrinp) == pin:  print('cracked')问题是当我输入该代码时它不起作用,因为没有任何输出作为输出。有没有办法将这 4 个数字组合成一个散列或其他任何名称?
查看完整描述

3 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

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

  • 单个整数永远不等于列表,无论内容如何

  • int()不保留前导0字符;int('0999')返回999int('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()转换的用户。:-)


这些都不需要散列;散列在这里没有用,因为您想测试相等性,而不是试图将大量潜在值减少到一组有限的选项(例如尝试将任意值放入有限大小的表中,或指导大到可以处理这些连接的有限数量的服务器的传入连接数)。


查看完整回答
反对 回复 2021-06-15
?
PIPIONE

TA贡献1829条经验 获得超9个赞

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


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')


查看完整回答
反对 回复 2021-06-15
  • 3 回答
  • 0 关注
  • 170 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号