Python 如何将while循环转换为函数

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

我已经创建了一个模拟,其中一个程序沿着一个序列移动。当它移动到序列中的某个元素时,它会将该元素从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 = 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)

函数输入将是一个序列,输出将是一个列表“记录”,概述程序如何在序列中移动。这很好,谢谢