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
。)
答案 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()