我尝试用python编写一个dict,将每个字母(从a到Z)随机分配给另一个(或他自己)。
例如A:S B:C C:B D:D。。。学生:A。。。Y:Z:Y。你知道吗
我的代码是:
import random
tblconex = {}
alphabet = {1: "A", 2: "B", 3: "C", 4: "D", 5: "E", 6: "F", 7: "G", 8: "H", 9: "I", 10: "J", 11: "K", 12: "L", 13: "M", 14: "N", 15: "O", 16: "P", 17: "Q", 18: "R", 19: "S", 20: "T", 21: "U", 22: "V", 23: "W", 24: "X", 25: "Y", 26: "Z"}
while n < 27:
var = alphabet[random.randint(1, 26)] #We randomly choose a letter
if var in tblconex or alphabet[n] in tblconex: #We test if she is not already assign to an other
n += 1
else:
tblconex.update({alphabet[n]: var}) #We assign it
tblconex.update({var: alphabet[n]})
n += 1
z=1
while z<len(tblconex)+1: #We print our letters
print(" ", alphabet[z], " : ", tblconex[alphabet[z]])
z += 1
但当我启动它时,他在几个字母后就停了下来,出现了一个关键错误,因为他没有分配所有的字母,我也不明白为什么。你知道吗
对不起,我英语不好,我是法国人;)
谢谢!你知道吗
基本问题是,即使已经将元素添加到字典中,也要增加
n
。因此,如果您已经添加了元素,它仍然将计算为一个元素。如果它是而不是添加的,则算作两个,但是在可能的情况下无论如何,没有理由这样做,我们可以先通过洗牌字符来创建一个随机字符串,然后将这些字符“缝合”在一起,如:
基本问题是,即使已经将元素添加到字典中,也要增加
n
。因此,如果您已经添加了元素,它仍然将计算为一个元素。如果它是而不是添加的,则算作两个,但是在可能的情况下无论如何,没有理由这样做,我们可以先通过洗牌字符来创建一个随机字符串,然后将这些字符“缝合”在一起,如:
或者,如果一个字符可以与其自身“配对”,我们可以像这样实现它:
这两种算法都是在线性时间内工作的,因为它们只对随机字符列表进行一次遍历,每次都将前一个字符与下一个字符(或当前字符与自身)链接起来。你知道吗
您可以使用
random.choice
从字母表中进行选择,每次删除1个字母:**检查是否已分配选项,如果已分配,则跳过键并继续。这将确保A映射到B,B映射到A。在结束时,我添加跳过的对,但是交换了键/值
相关问题 更多 >
编程相关推荐