作用于python中的变量变化

所以我正在尝试制作一个医院模拟(基于文本)并且可以选择招募更多员工。我已经想出如何限制他们可以招募的次数(限制 350 名员工)并且他们获得的数量应该是随机的(random.choice(staffrec),但是一旦从 staffrec 生成随机数,它就会保持不变相同,我希望代码再次运行并产生不同的结果。这是我的代码。(抱歉,我已经把所有的都放了,所以我不会错过任何东西)


import time

import random


staff = 100

wards = 20

beds = 140

patients = 80


staffrec = [1, 2, 3, 4, 5, 6, 7, 8, 9]

staffrec = random.choice(staffrec)



option = ""


print("Welcome to Hospital Simulator!")


print("You have to manage the hospital with patients coming in,")

print("Staff recruitement and staff quitting,")

print("and how many beds and wards are available!")


Aopt = ["A", "a"]

Bopt = ["B", "b"]

Copt = ["C", "c"]

Dopt = ["D", "d"]

Eopt = ["E", "e"]

Fopt = ["F", "f"]


while staff <= 350:

    staffrec = [1, 2, 3, 4, 5, 6, 7, 8, 9]

    staffrec = random.choice(staffrec)

    staff = staff + staffrec


while option != Fopt:

    option = input("""What would you like to do:

A: View number of patients

B: View number of beds

C: View number of wards

D: View number of staff

E: Recruit more staff

F: Quit\n""")


    if option in Aopt:

        print("You currently have " + str(patients) + " patients\n")


    if option in Bopt:

        print("You currently have " + str(beds) + " beds\n")


    if option in Copt:

        print("You have " + str(wards) + " wards\n")


    if option in Dopt:

        print("You currently have " + str(staff) + " staff\n")


    if option in Eopt:

        print("You try and recruit more staff. You recruit " + str(staffrec) + " staff\n")

        if staff > 350:

            print("You cannot recruit any more staff!")


    if option in Fopt:

        print("Goodbye!")

        break

还有其他与使用类的主题相关的帖子,但由于我是 python 的新手,所以我并不完全理解它们。:3 任何帮助将不胜感激!


慕后森
浏览 136回答 3
3回答

一只萌萌小番薯

staffrec您在主要游戏逻辑之前分配值并且从不更新新的随机值,因此每次您进入添加新兵的循环块时它的值都是相同的。如果您希望它每次都更改,只需random在需要随机数时调用 only 即可。我还建议使用randintover 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!")

回首忆惘然

据我了解,您想跟踪之前的选择,如果新选择与之前的选择相同,则应尝试再次选择,直到获得新值,这是我的看法:prev_staffrec = Nonestaffrec = [1, 2, 3, 4, 5, 6, 7, 8, 9]def choose_staffrec():&nbsp; &nbsp; global prev_staffrec # to make sure you're accessing it in the global scope&nbsp; &nbsp; staffrec2 = random.choice(staffrec)&nbsp; &nbsp; if staffrec2 == prev_staffrec:&nbsp; &nbsp; &nbsp; &nbsp; choose_staffrec() # run the function again if it's the same&nbsp; &nbsp; return staffRec2这消除了现在在任何有线路的地方一遍又一遍地创建 staffrec 的需要staffrec = [1, 2, 3, 4, 5, 6, 7, 8, 9]staffrec = random.choice(staffrec)你可以替换为:choose_staffrec()

慕的地10843

关于您的代码,有几件事对我来说很突出: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来生成一个新值,就像我之前提到的那样。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python