0

我试着做一个简单的函数,在这个例子中掷硬币 n 次,五十 (50) 次,然后将结果存储到列表“ my_list”中。使用for loop.

如果抛掷的结果不是 25 正面和 25 反面(即 24-26 的比率),它应该删除my_list包含结果的列表的内容并再次循环抛掷 50 次,直到结果正好是 25-25。

功能:

  1. 打印空列表。
  2. 如果 my_list.count(1) 为 25,则启动仅结束的 while 循环。
  3. 使用 random(1,2) 掷硬币。
  4. 将结果输入到 my_list。
  5. 如果 my_list.count(1) 不完全是 25,那么代码应该删除列表的内容并重复 while 循环。

- - 编码:latin-1 - -

import random
def coin_tosser():
    my_list = []

    # check if there is more or less 1 (heads) in the list
    # if there is more or less number ones in the list, loop
    # "while". If "coin tosser" throws exactly 25 heads and
    # 25 tails, then "while my_list.count(1) != 25:" turns True

    while my_list.count(1) != 25: # check if there is more or less 1 (heads) in the list
        print "Throwing heads and tails:"
        for i in range(50):
            toss = random.randint(int(1),int(2)) #tried this also without int() = (1,2)
            my_list.append(toss)
        if my_list.count(1) < 25 or my_list.count(1) > 25:
            my_list.remove(1) # remove number ones (heads) from the list
            my_list.remove(2) # remove number twos (tails) from the list

    # after loop is finished (25 number ones in the list), print following:

    print "Heads is in the list",
    print my_list.count(1), "times."
    print "Tails is in the list",
    print my_list.count(2), "times."
    # print
    print my_list

coin_tosser()

问题

当我尝试使用 my_list.remove(1) 时,它不会从列表中删除任何内容。如果我将 my_list.remove(1) 替换为 my_list.remove('test') 并将 'test' 添加到 my_list 中,则如果不满足条件(应该如此),程序将删除 'test'。

为什么它不删除数字?我不确定这些“1”和“2”是存储为列表int还是列表str。我的猜测是在str

我做错了什么?

4

2 回答 2

0

list.remove(x)仅删除第一个等于 的项目x,因此您每次只删除一个项目:

my_list.remove(1)
my_list.remove(2)

因此,您根本不会清除您的清单。相反,您可以通过将其设置为新的空列表来完全清除列表:

my_list = []

由于您只对正面/反面抛掷次数感兴趣,因此您也可以只计算它们而不是记住所有单独的抛掷次数。所以你只需要一个计数器:

headCount = 0
while headCount != 25:
    print "Throwing heads and tails:"
    headCount = 0
    for i in range(50):
        toss = random.randint(1, 2)
        if toss == 1:
            headCount += 1
于 2014-10-12T15:51:46.577 回答
0

正如@poke 所说,list.remove(x)仅删除 in 的第一次x出现list。我会my_list在每次迭代中简单地使用一个新列表并摆脱整个if循环内部。

while my_list.count(1) != 25: # check if there is more or less 1 (heads) in the list
    print "Throwing heads and tails:"
    my_list = []
    for i in range(50):
        toss = random.randint(int(1),int(2)) #tried this also without int() = (1,2)
        my_list.append(toss)

如果循环中有 25 个磁头,则无需再次检查,因为您只是在循环条件中检查它while my_list.count(1) != 25

顺便提一句:

my_list.count(1) < 25 or my_list.count(1) > 25

与您的情况相同,while但可读性较差。

于 2014-10-12T16:09:37.600 回答