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
来生成一个新值,就像我之前提到的那样。
添加回答
举报