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條經驗 獲得超8個贊
我認為使用遞歸是解決這個問題的好方法。
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]
添加回答
舉報