如何link随机数转为英文字母,不重复
How do I link random numbers to letters of the alphabet, no duplicates
我的目标是最终创建一个谜题,允许用户输入一个短语,将其编码为数字,然后让他们通过慢慢计算字母表中的数字来找出短语。
尽管我不想要 a=1、b=2 等,因为那太容易了。
到目前为止我已经能够做到这一点,从长远来看,但即使这样也不排除重复:
字母获得随机数:
import random
a = random.randint(1, 26)
b = random.randint(1, 26)
c = random.randint(1, 26)
d = random.randint(1, 26)
e = random.randint(1, 26)
f = random.randint(1, 26)
g = random.randint(1, 26)
h = random.randint(1, 26)
i = random.randint(1, 26)
j = random.randint(1, 26)
k = random.randint(1, 26)
l = random.randint(1, 26)
m = random.randint(1, 26)
n = random.randint(1, 26)
o = random.randint(1, 26)
p = random.randint(1, 26)
q = random.randint(1, 26)
r = random.randint(1, 26)
s = random.randint(1, 26)
t = random.randint(1, 26)
u = random.randint(1, 26)
v = random.randint(1, 26)
w = random.randint(1, 26)
x = random.randint(1, 26)
y = random.randint(1, 26)
z = random.randint(1, 26)
print ("a is:",a)
print ("b is:",b)
print ("c is:",c)
print ("d is:",d)
print ("e is:",e)
print ("f is:",f)
print ("g is:",g)
print ("h is:",h)
print ("i is:",i)
print ("j is:",j)
print ("k is:",k)
print ("l is:",l)
print ("m is:",m)
print ("n is:",n)
print ("o is:",o)
print ("p is:",p)
print ("q is:",q)
print ("r is:",r)
print ("s is:",s)
print ("t is:",t)
print ("u is:",u)
print ("v is:",v)
print ("w is:",w)
print ("x is:",x)
print ("y is:",y)
print ("z is:",z)
您可以执行以下操作,构建从字符到唯一数字 1-26 的 dict
映射:
import string, random
nums = random.sample(range(1, 27), 26)
code = dict(zip(string.ascii_lowercase, nums))
# {'a': 8, 'b': 13, 'c': 20, 'd': 25, 'e': 10, 'f': 17,
# 'g': 2, 'h': 9, 'i': 12, 'j': 7, 'k': 15, 'l': 19, 'm': 26,
# 'n': 18, 'o': 24, 'p': 4, 'q': 21, 'r': 5, 's': 3, 't': 1,
# 'u': 16, 'v': 22, 'w': 14, 'x': 23, 'y': 11, 'z': 6}
对于解码,你可以只使用向后映射:
decode = dict(zip(nums, string.ascii_lowercase))
我的目标是最终创建一个谜题,允许用户输入一个短语,将其编码为数字,然后让他们通过慢慢计算字母表中的数字来找出短语。
尽管我不想要 a=1、b=2 等,因为那太容易了。
到目前为止我已经能够做到这一点,从长远来看,但即使这样也不排除重复:
字母获得随机数:
import random
a = random.randint(1, 26)
b = random.randint(1, 26)
c = random.randint(1, 26)
d = random.randint(1, 26)
e = random.randint(1, 26)
f = random.randint(1, 26)
g = random.randint(1, 26)
h = random.randint(1, 26)
i = random.randint(1, 26)
j = random.randint(1, 26)
k = random.randint(1, 26)
l = random.randint(1, 26)
m = random.randint(1, 26)
n = random.randint(1, 26)
o = random.randint(1, 26)
p = random.randint(1, 26)
q = random.randint(1, 26)
r = random.randint(1, 26)
s = random.randint(1, 26)
t = random.randint(1, 26)
u = random.randint(1, 26)
v = random.randint(1, 26)
w = random.randint(1, 26)
x = random.randint(1, 26)
y = random.randint(1, 26)
z = random.randint(1, 26)
print ("a is:",a)
print ("b is:",b)
print ("c is:",c)
print ("d is:",d)
print ("e is:",e)
print ("f is:",f)
print ("g is:",g)
print ("h is:",h)
print ("i is:",i)
print ("j is:",j)
print ("k is:",k)
print ("l is:",l)
print ("m is:",m)
print ("n is:",n)
print ("o is:",o)
print ("p is:",p)
print ("q is:",q)
print ("r is:",r)
print ("s is:",s)
print ("t is:",t)
print ("u is:",u)
print ("v is:",v)
print ("w is:",w)
print ("x is:",x)
print ("y is:",y)
print ("z is:",z)
您可以执行以下操作,构建从字符到唯一数字 1-26 的 dict
映射:
import string, random
nums = random.sample(range(1, 27), 26)
code = dict(zip(string.ascii_lowercase, nums))
# {'a': 8, 'b': 13, 'c': 20, 'd': 25, 'e': 10, 'f': 17,
# 'g': 2, 'h': 9, 'i': 12, 'j': 7, 'k': 15, 'l': 19, 'm': 26,
# 'n': 18, 'o': 24, 'p': 4, 'q': 21, 'r': 5, 's': 3, 't': 1,
# 'u': 16, 'v': 22, 'w': 14, 'x': 23, 'y': 11, 'z': 6}
对于解码,你可以只使用向后映射:
decode = dict(zip(nums, string.ascii_lowercase))