Python 如何将while循环转换为函数
我已经创建了一个模拟,其中一个程序沿着一个序列移动。当它移动到序列中的某个元素时,它会将该元素从0更改为1,并将刚刚离开的元素从1更改为0。它只能开始,移动到下一个元素,如果随机生成的数字小于每个元素的关联分数,则可以离开序列 下面是它的代码:Python 如何将while循环转换为函数,python,list,function,while-loop,simulation,Python,List,Function,While Loop,Simulation,我已经创建了一个模拟,其中一个程序沿着一个序列移动。当它移动到序列中的某个元素时,它会将该元素从0更改为1,并将刚刚离开的元素从1更改为0。它只能开始,移动到下一个元素,如果随机生成的数字小于每个元素的关联分数,则可以离开序列 下面是它的代码: import random import numpy as np import matplotlib as plt random.seed(5) f = random.randint(0,3) m = random.randint(0,3) s = r
import random
import numpy as np
import matplotlib as plt
random.seed(5)
f = random.randint(0,3)
m = random.randint(0,3)
s = random.randint(0,3)
seq = [0.2]*s + [0.5]*m + [0.8]*f
random.shuffle(seq)
seq = [0.1] + seq
seq = seq + [0.1]
state = [0]*len(seq)
record = []
count = 0
pool = 10
while count < len(seq)+1:
if count == 0 and random.random() < seq[count]:
print("START")
print("random is less than", seq[count])
state[count]+=1
pool-=1
print(state)
record.append(state.copy())
count += 1
elif count == 0 and random.random() > seq[count]:
print("DOES NOT START")
print("random is greater than", seq[count])
state[count]+=0
pool-=0
print(state)
record.append(state.copy())
count += 0
elif count > 0 and count <= len(seq)-1 and random.random() < seq[count]:
print("DOES MOVE")
print("random is less than", seq[count])
state[count]+=1
state[count-1]-=1
print(state)
record.append(state.copy())
count += 1
elif count > 0 and count < len(seq)-1 and random.random() > seq[count]:
print("DOES NOT MOVE")
print("random is greater than", seq[count])
state[count]+=0
state[count-1]-=0
print(state)
record.append(state.copy())
count += 0
elif count == len(seq) and random.random() < seq[count-1]:
print("END")
print("random is less than", seq[count-1])
state[count-1]+= -1
pool+=1
print(state)
record.append(state.copy())
count += 1
elif count == len(seq) and random.random() > seq[count-1]:
print("DOES NOT END")
print("random greater than", seq[count-1])
state[count-1]-= 0
pool+=0
print(state)
record.append(state.copy())
count += 0
print("count is: ", count)
随机导入
将numpy作为np导入
将matplotlib作为plt导入
随机种子(5)
f=random.randint(0,3)
m=random.randint(0,3)
s=random.randint(0,3)
序列=[0.2]*s+[0.5]*m+[0.8]*f
随机。随机(seq)
序号=[0.1]+序号
序号=序号+[0.1]
状态=[0]*len(seq)
记录=[]
计数=0
游泳池=10
当计数seq[count]:
打印(“不开始”)
打印(“随机大于”,序号[计数])
状态[计数]+=0
池-=0
打印(状态)
record.append(state.copy())
计数+=0
elif count>0和count 0和countseq[count]:
打印(“不移动”)
打印(“随机大于”,序号[计数])
状态[计数]+=0
状态[计数-1]-=0
打印(状态)
record.append(state.copy())
计数+=0
elif count==len(seq)和random.random()seq[count-1]:
打印(“未结束”)
打印(“随机大于”,序号[计数-1])
状态[计数-1]-=0
池+=0
打印(状态)
record.append(state.copy())
计数+=0
打印(“计数为:”,计数)
如何将模拟转换为一个函数,以便可以一次运行多个模拟,而不必复制整个模拟代码
我看过其他的答案,但这些对我帮助不大。我对编码很陌生,所以我不知道这是不是一件小事?任何反馈/解决方案都将不胜感激。python函数需要输入并返回一些内容。例如:
def function_name(x):
return x**2
这个函数取一个数字x,并给出它的平方值,所以我建议你做的是:
-考虑您想要的输入(这些将是模拟所需的值)
-你想要你的函数给你什么。如果是计数,则执行返回计数
要运行该函数,只需将其调用到变量:
result = function_name(2)
在我所展示的示例中,这个
结果将是4将操作置于函数下,并传入输入
import random
import numpy as np
import matplotlib as plt
random.seed(5)
def simulation(s,m,f):
seq = [0.2] * s + [0.5] * m + [0.8] * f
random.shuffle(seq)
seq = [0.1] + seq
seq = seq + [0.1]
state = [0] * len(seq)
record = []
count = 0
pool = 10
while count < len(seq)+1:
if count == 0 and random.random() < seq[count]:
print("START")
print("random is less than", seq[count])
state[count]+=1
pool-=1
print(state)
record.append(state.copy())
count += 1
elif count == 0 and random.random() > seq[count]:
print("DOES NOT START")
print("random is greater than", seq[count])
state[count]+=0
pool-=0
print(state)
record.append(state.copy())
count += 0
elif count > 0 and count <= len(seq)-1 and random.random() < seq[count]:
print("DOES MOVE")
print("random is less than", seq[count])
state[count]+=1
state[count-1]-=1
print(state)
record.append(state.copy())
count += 1
elif count > 0 and count < len(seq)-1 and random.random() > seq[count]:
print("DOES NOT MOVE")
print("random is greater than", seq[count])
state[count]+=0
state[count-1]-=0
print(state)
record.append(state.copy())
count += 0
elif count == len(seq) and random.random() < seq[count-1]:
print("END")
print("random is less than", seq[count-1])
state[count-1]+= -1
pool+=1
print(state)
record.append(state.copy())
count += 1
elif count == len(seq) and random.random() > seq[count-1]:
print("DOES NOT END")
print("random greater than", seq[count-1])
state[count-1]-= 0
pool+=0
print(state)
record.append(state.copy())
count += 0
print("count is: ", count)
f = random.randint(0,3)
m = random.randint(0,3)
s = random.randint(0,3)
simulation(f,m,s)
随机导入
将numpy作为np导入
将matplotlib作为plt导入
随机种子(5)
def模拟(s、m、f):
序列=[0.2]*s+[0.5]*m+[0.8]*f
随机。随机(seq)
序号=[0.1]+序号
序号=序号+[0.1]
状态=[0]*len(seq)
记录=[]
计数=0
游泳池=10
当计数seq[count]:
打印(“不开始”)
打印(“随机大于”,序号[计数])
状态[计数]+=0
池-=0
打印(状态)
record.append(state.copy())
计数+=0
elif count>0和count 0和countseq[count]:
打印(“不移动”)
打印(“随机大于”,序号[计数])
状态[计数]+=0
状态[计数-1]-=0
打印(状态)
record.append(state.copy())
计数+=0
elif count==len(seq)和random.random()seq[count-1]:
打印(“未结束”)
打印(“随机大于”,序号[计数-1])
状态[计数-1]-=0
池+=0
打印(状态)
record.append(state.copy())
计数+=0
打印(“计数为:”,计数)
f=random.randint(0,3)
m=random.randint(0,3)
s=random.randint(0,3)
模拟(f、m、s)
函数输入将是一个序列,输出将是一个列表“记录”,概述程序如何在序列中移动。这很好,谢谢