我需要创建一个程序,允许用户输入一个密码,而不会显示密码实际是什么。这里有一些更详细的信息:
我需要在程序内存储一个用户应该事先知道的PIN码。然后我将需要生成一个包含0到3范围内的十个随机数的字符串。当程序运行时,它应该打印两行,如
PIN: 0 1 2 3 4 5 6 7 8 9
| | | | | | | | | |
v v v v v v v v v v
NUM: 2 2 3 1 1 1 3 2 3 2
如果用户的PIN码为“7724”,则输入“2231”。程序将检查数字2231是否确实可能对应于7724.如果是,它应该欢迎用户进入程序(并退出)。如果不是,则用户获得警告并且授予总共三次尝试。
请注意,初始“2”表示我的PIN的第一个数字是0或1或7或9。
我是python的新手,我正在使用3.1 我不知道如何开始这个代码。任何帮助将非常感激。谢谢!
答案 0 :(得分:1)
也许字典是一种很好的方法。我想让你开始,但请阅读这两个。
http://docs.python.org/library/random.html
http://docs.python.org/tutorial/datastructures.html#dictionaries
一般的python教程:http://docs.python.org/tutorial/index.html
import random
pinToCode = dict()
for i in range(10):
pintoCode(i) = random.randint(0,9)
这将设置您在上面描述的映射。我不知道你是如何存储引脚的,但是你想要将用户输入和正确的引脚pinToCode
映射到一个哈希函数中,并希望它们匹配。
不要使用简称为hash
的函数,它没有加密值,仅用于数据结构实现。
你可以在这里开始使用哈希函数http://docs.python.org/library/crypto.html http://docs.python.org/library/md5.html
答案 1 :(得分:1)
您需要使用dict将数字映射到1到3之间的随机数,包括:
from random import randint
dmap = {str(x): str(randint(1, 3)) for x in range(10)} # 2.7+
您的问题似乎表明,重要的是用户不应该通过键入来显示他的PIN,而且如何将其存储在程序中并不重要。因此,我假设您已将其存储为普通字符串pw = "7724"
。
输入地图:
print(" ".join(sorted(dmap.keys())))
print(" ".join("|" for x in dmap.keys()))
print(" ".join("v" for x in dmap.keys()))
print(" ".join(map[x] for x in sorted(dmap.keys())))
最后验证:
correct = [dmap[x] for x in pw]
for i in range(4):
if [dmap[x] for x in raw_input("Code: ")] == correct:
break
print("Try again")
else:
# Only run if for loop did not break
print("Sorry, no more tries!")
import sys
sys.exit()
print("Correct!")