首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python和.randrange if-else语句设置

Python和.randrange if-else语句设置
EN

Stack Overflow用户
提问于 2012-11-24 06:05:30
回答 1查看 674关注 0票数 0

我的程序非常复杂,下面我提供一个更简单的版本:

代码语言:javascript
复制
while True:#This first part asks the user if he wants to run in deterministic mode(explained later) If he does then deterministic is given a value of 1, else, it is given a value of two.
    mode= input("Would you like to start the program in deterministic mode?(y/n)")
    for i in mode:
        if i not in ('yYnN'):
            print('Please enter either a \'y\' or an \'n\', Please try again')
            break
    else:
        break

if mode=='y' or mode== 'Y':
    deterministic= 1
elif mode=='n' or mode=='N':
    deterministic= 2

下面是一些使用上述代码的代码。这是一条if-elif语句,其中如果确定性值为==1,则函数将运行;如果为deterministic==2,则运行不同的函数。

代码语言:javascript
复制
        if deterministic==2:#position,time, and energy variables will come from the function updateDisplayAllVar(....)

            position,time,energy=updateDisplayAllVar(selection,position,time,energy)
        elif deterministic==1:#position,time, and energy variables will come from the function deterministic(....)

            position,time,energy=deterministic(selection,position,time,energy)

现在我将向您展示上述代码中的两个函数。我认为问题出在他们身上。第一个函数给出一个随机数,并且每次都可能给出一个不同的随机数。第二个函数使用.seed将随机数限制为每次相同的“随机”数。

def updateDisplayAllVar(选择,位置,时间,能量):

代码语言:javascript
复制
if selection=='w' or selection =='W':
    energy= energy
    position= position+1
    time=time+1
elif selection=='j' or selection =='J':
    energy= energy-1
    position= position+2
    time=time+1 
elif selection=='r' or selection =='R':
    energy= energy-random.randrange(1,2+1)
    position= position+random.randrange(1,4+1)
    time=time+1
elif selection=='f' or selection =='F':
    energy= energy- random.randrange(3,5+1)
    position= position+random.randrange(3,8+1)
    time=time+1



def deterministicMode(selection,position,time,energy):

    if selection=='w' or selection =='W':
        energy= energy
        position= position+1
        time=time+1
    elif selection=='j' or selection =='J':
        energy= energy-1
        position= position+2
        time=time+1 
    elif selection=='r' or selection =='R':
        random.seed(1)
        energy= energy-random.randrange(1,2+1)
        position= position+random.randrange(1,4+1)
        time=time+1
    elif selection=='f' or selection =='F':
        random.seed(3)
        energy= energy- random.randrange(3,5+1)
        position= position+random.randrange(3,8+1)
        time=time+1

现在我的问题是。有了这段代码,即使我不选择确定性(无随机数)模式,我仍然可以得到非随机的、基于第二个函数的数字。也就是说,尽管上面有两个函数,并且我要求每个函数都根据用户的输入运行……运行的总是deterministicMode(selection,position,time,energy)。有没有人知道怎么解决。如果有任何不清楚的地方,请让我知道,我会修复它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-24 06:33:33

只需用当前系统时间重新设定RNG的种子,使其再次“随机”即可:

代码语言:javascript
复制
def deterministicMode(selection,position,time,energy):
    random.seed()  # <-- Add this line right here

    if selection=='w' or selection =='W':
        energy= energy
        position= position+1
        time=time+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13536240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档