为了账号安全,请及时绑定邮箱和手机立即绑定

while 循环未读取变量

while 循环未读取变量

万千封印 2021-06-07 08:27:37
import numpy as npdef RVs():   #s = 0    s = 1    f = 0    while s!=0:        z = np.random.random()        if z<=0.5:            x = -1        else:            x = 1        s = s + x        f = f + 1    return(f)RVs()如果我把代码运行顺利,s=1但由于 while 循环是 for s!=0,如果我从s=0循环开始甚至没有运行。那么,在这种情况下,当我必须运行s=0. (或者更准确地说,我需要 while 循环读取s=0是第二次。)
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

另一个解决方案很棒。这是一种不同的方法:


import numpy as np


def RVs():

    # s = 0

    s = 1

    f = 0


    while True: # will always run the first time...

        z = np.random.random()


        if z <= 0.5:

            x = -1

        else:

            x = 1


        s = s + x

        f = f + 1


        if s == 0: break # ... but stops when s becomes 0


    return(f)


RVs()

注意:return(f)需要在原始代码中缩进才能在RVs函数内。


查看完整回答
反对 回复 2021-06-09
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

据我所知,您正在尝试模拟 do while 循环,该循环将至少运行一次(并且您希望 s 的起始值为 0)


如果是这种情况,您可以无限地运行循环并在条件为真时中断循环。例如:


while True:

    #code here

    if (s != 0):

        break

这将至少运行一次您的循环,并在最后再次运行循环,直到您的条件通过


查看完整回答
反对 回复 2021-06-09
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

Python 没有 do.... while() 和其他语言一样。所以只需使用“第一次”操作符。


import numpy as np

def RVs():

    s = 0

    t = 1 # first time in loop

    f = 0

    while s!=0 or t==1:

        t = 0 # not first time anymore

        z = np.random.random()

        if z<=0.5:

            x = -1

        else:

            x = 1

        s = s + x

        f = f + 1

return(f)

RVs()


查看完整回答
反对 回复 2021-06-09
  • 3 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号