0

所以我需要创建一个带有 m 尾的列表。列表的元素将是尾部和头部之间的随机选择。我喜欢 :

Def S(m):
    list=[]
    counter=0
    signs=["head","tail"]
    while counter<(m):
        list.append(random.choice(signs))
        for k in list:
            if k=="tail":
               counter+=1
    print(list)

所以这个给了我一个列表,但没有 m 尾巴。我认为这里的时间是错误的,但我不确定如何编写代码。你能帮我改一下吗?

4

2 回答 2

3

这将起作用:

from random import choice

def S(m):
    lst = []
    counter = 0
    signs = ["head", "tail"]
    while counter < m:
        toss = choice(signs)
        lst.append(toss)
        if toss == 'tail':
            counter += 1
    return lst

lst = S(10)
print(lst)                # ['head', 'tail', 'head', 'head', 'tail', ...]
print(lst.count('tail'))  # 10
于 2018-09-26T09:28:45.900 回答
0

如果你想让你自己的代码工作,你可以添加:

counter = 0

while条件之后。您代码中的错误是计数的增加。它的作用是针对一个循环,它计算列表中的所有尾部并将其添加到计数器中,然后,就像雪球效应一样,相同的尾部被计数并为每个后续循环再次添加。

这种更正有点低效,因为您总是会清除 count 的值,然后从头开始重新计数。如果您的列表达到较大的索引值,它可能会减慢您的代码。

祝你好运!

于 2018-09-26T09:41:21.237 回答