如果每个数字都有至少一个不能跟随它的数字,如何在1-14之间生成100个随机数字的字符串? 例如,“ 1”后不能跟“ 3”,“ 2”后不能跟“ 4”或“ 9”。 也不重复,因此不能立即跟随另一个“ 1”。
答案 0 :(得分:0)
要获取随机数,可以使用random
模块,尤其是random.randint
或random.choice
,以下代码将产生100
范围内的1...14
个随机数(包含在内),但不重复:
numbers = [random.choice(range(1,14+1))]
while len(numbers)<100:
lastnumber = numbers[-1]
newnumber = random.choice([i for i in range(1,14+1) if i!=lastnumber])
numbers.append(newnumber)
编辑:跟随版本将阻止跟随特定的数字
numbers = [random.choice(range(1,14+1))]
tabu = [[1,2],[1,2,3],[2,3,4],[3,4,5],[4,5,6],[5,6,7],[6,7,8],[7,8,9],[8,9,10],[9,10,11],[10,11,12],[11,12,13],[12,13,14],[13,14]]
while len(numbers)<100:
lastnumber = numbers[-1]
newnumber = random.choice([i for i in range(1,14+1) if not i in tabu[lastnumber-1]])
numbers.append(newnumber)
tabu
列表中包含在给定编号之后禁止使用哪些编号的信息,但是由于python索引从0
开始,因此存在tabu[lastnumber-1]
。 1
之后没有2
和1
,1
之后没有2
和3
和2
,没有2
以及3
之后的4
和3
,依此类推。
答案 1 :(得分:0)
您可以使用字典升级上一个示例(@Daweo),该字典将包含不允许跟在前一个数字之后的数字
...
newnumber = random.choice([i for i in range(1,14+1) if i!=myfun(i)])
def myfun(i):
i = str(i)
abc = {'1':2 ,'2':9, '3':12...} #I'm not sure whether the keyword of the dictionary is a number, but I'm sure it will be right
return abc[i] #will return the number that is associated with the key
有关更多信息,请参见https://www.tutorialspoint.com/python3/python_dictionary.htm