while循环未读取变量

时间:2018-09-03 21:48:19

标签: python python-3.x while-loop

import numpy as np
def 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循环是针对s!=0的,所以如果我以s=0开头,则该循环甚至无法运行。因此,在这种情况下,我必须为s=0运行代码时该怎么办。 (或更准确地说,我需要while循环来第二次读取s=0。)

4 个答案:

答案 0 :(得分: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函数中。

答案 1 :(得分:2)

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

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

while True:
    #code here
    if (s != 0):
        break

这将至少在一次循环中运行一次,最后将再次运行循环,直到您的情况通过为止

答案 2 :(得分:1)

尝试一下:

import numpy as np
def RVs():
   #s = 0
    s = 1
    f = 0
    while s!=0 or f==0: #will always run it the first time
        z = np.random.random()
        if z<=0.5:
            x = -1
        else:
            x = 1
        s = s + x
        f = f + 1
    return(f)
RVs()

答案 3 :(得分:1)

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()