3 回答

TA貢獻1795條經驗 獲得超7個贊
staffrec
您在主要游戲邏輯之前分配值并且從不更新新的隨機值,因此每次您進入添加新兵的循環塊時它的值都是相同的。如果您希望它每次都更改,只需random
在需要隨機數時調用 only 即可。
我還建議使用randint
over choice 方法,因為它會在任意兩個值之間生成一個隨機數。例如,random.randint(0, 100)
將返回 0 到 100 之間的隨機數。
見下文:
if option in Eopt:
? ? staffrec = random.randint(1, 9)
? ? staff = staffrec
? ? print("You try and recruit more staff. You recruit " + str(staffrec) + " staff\n")
? ? if staff > 350:
? ? ? ? print("You cannot recruit any more staff!")

TA貢獻1847條經驗 獲得超11個贊
據我了解,您想跟蹤之前的選擇,如果新選擇與之前的選擇相同,則應嘗試再次選擇,直到獲得新值,這是我的看法:
prev_staffrec = None
staffrec = [1, 2, 3, 4, 5, 6, 7, 8, 9]
def choose_staffrec():
global prev_staffrec # to make sure you're accessing it in the global scope
staffrec2 = random.choice(staffrec)
if staffrec2 == prev_staffrec:
choose_staffrec() # run the function again if it's the same
return staffRec2
這消除了現在在任何有線路的地方一遍又一遍地創建 staffrec 的需要
staffrec = [1, 2, 3, 4, 5, 6, 7, 8, 9]
staffrec = random.choice(staffrec)
你可以替換為:
choose_staffrec()

TA貢獻1785條經驗 獲得超8個贊
關于您的代碼,有幾件事對我來說很突出:
staffrec?=?[1,?2,?3,?4,?5,?6,?7,?8,?9] staffrec?=?random.choice(staffrec)
這兩行沒有任何作用,因為staffrec
無論如何您都要替換 later 的值。此外,根據經驗,避免重復使用變量名,特別是如果您將它們重新分配給完全不同的類型(以前staffrec
是列表,現在是整數)。
這個循環:
while?staff?<=?350: ????staffrec?=?[1,?2,?3,?4,?5,?6,?7,?8,?9] ????staffrec?=?random.choice(staffrec) ????staff?=?staff?+?staffrec
看似多余,實際上并沒有限制staff
到最大350。使用這種方法,當循環結束時,staff
將始終在351和359之間。你希望實際范圍是多少?為什么你需要一個循環?只是用來random.randint
生成一個固定范圍內的數字。
這種情況:
while?option?!=?Fopt:
永遠不會是假的。option
永遠是一個字符串,一個字符串永遠不會等于一個元組。由于無論如何您break
稍后都會使用來跳出循環,因此您不妨將其轉換為while True:
.
staff
如果我正確理解了這個問題,您想知道如何為(通過重新運行之前的 while 循環)生成一個新值。您可以將它包裝在一個函數中,但這似乎沒有必要 - 只需使用它random.randint
來生成一個新值,就像我之前提到的那樣。
添加回答
舉報