3 回答
TA贡献1810条经验 获得超4个赞
:=您可以使用Python 3.8 中的赋值表达式运算符通过列表推导来做到这一点。
>>> import random
>>> dic={'1':[(1,2,4,3),(1,2,3,1)],'2':[(2,4,2,3),(2,6,5,3)],'3':[(3,5,9,1),(3,2,5,2),(3,7,8,1)]}
>>> y = (1,2,4,3)
>>> n = 20
>>> [(y:=random.choice(dic[str(y[-1])])) for _ in range(n)]
[(3, 2, 5, 2), (2, 4, 2, 3), (3, 7, 8, 1), (1, 2, 4, 3), (3, 2, 5, 2), (2, 4, 2, 3), (3, 7, 8, 1), (1, 2, 4, 3), (3, 5, 9, 1), (1, 2, 3, 1), (1, 2, 3, 1), (1, 2, 3, 1), (1, 2, 4, 3), (3, 2, 5, 2), (2, 4, 2, 3), (3, 7, 8, 1), (1, 2, 3, 1), (1, 2, 3, 1), (1, 2, 3, 1), (1, 2, 4, 3)]
最初的选择y并不重要,只要str(y[-1])是dic.
TA贡献1725条经验 获得超7个赞
我认为使用递归是解决这个问题的好方法。
import random
def concatenator(dictionary, i, key=1):
if i > 0:
tuple_chosen = random.choice(dictionary[str(key)])
next_key = tuple_chosen[-1]
return str(tuple_chosen) + concatenator(dictionary, i-1, key=next_key)
else:
return ""
按如下方式使用此函数:(i 是您希望最后拥有的元组数)
dic = {'1': [(1,2,4,3),(1,2,3,1)],
'2': [(2,4,2,3),(2,6,5,3)],
'3': [(3,5,9,1),(3,2,5,2),(3,7,8,1)]}
concatenator(dic, 5)
# outputs: '(1, 2, 3, 1)(1, 2, 3, 1)(1, 2, 3, 1)(1, 2, 3, 1)(1, 2, 3, 1)'
TA贡献1942条经验 获得超3个赞
到目前为止,我还没有理解您的问题,我推断您想要一种自动化的方式来动态创建变量,即拥有c<n>变量而无需自己输入。
你有两种方法:
Using exec: exec用于从代码本身执行 Python 代码。所以你可以尝试这样的事情:
inp = int(input('How many? ))
for i in range(inp):
val = 20 # Enter the value here
exec(f"c{i}=val")
但这不推荐
使用字典:字典是为此而生的,在这里很完美
inp = int(input("How many? "))
vals = {}
for i in range(inp):
val = 10 # Value
vals[f"c{i}"] = val # or simply vals[i]
添加回答
举报