这是我的功能:
def seq_sum(n):
""" input: n, generate a sequence of n random coin flips
output: return the number of heads
Hint: For simplicity, use 1,0 to represent head,tails
"""
flip = 0
heads = 0
while flip <= n:
coin = random.randint(0,2)
flip += 1
if coin == 1:
heads += 1
print(heads)
输出如下:
55
1
0
2
1
等等。但我想要的是头数,加上输出的LIST:
55
[1, 0, 2, 1, .....]
当我尝试打印(列表(头))时,我收到以下错误消息:
TypeError:&#39; int&#39;对象不可迭代
答案 0 :(得分:2)
在您的功能中,您只是跟踪头部的总数而不是它们的历史记录。您需要创建一个可迭代的集合来保存临时值,例如列表或Numpy数组。
import numpy as np
def seq_sum(n):
flips = np.random.randint(low=0, high=2, size=n)
return sum(flips), flips.tolist()
# Example usage.
total_heads, flips = seq_sum(n=10)
请注意,对于numpy的randint
函数,起点和终点分别是包含和排他。
答案 1 :(得分:1)
希望这段代码可以满足您的需求
def seq_sum(n):
flips = [random.randint(0, 1) for _ in range(n)]
return sum(flips), flips
用法
s, l = seq_sum(10)
从代码中的注释我可以看出函数应该只返回头数,所以
def seq_sum(n):
return sum(random.randint(0, 1) for _ in range(n))
答案 2 :(得分:1)
import random
# edit in place
def seq_sum(n):
""" input: n, generate a sequence of n random coin flips
output: return the number of heads
Hint: For simplicity, use 1,0 to represent head,tails
"""
flip = 0
heads = 0
seq = list()
while flip <= n:
coin = random.randint(0,2)
seq.append(coin)
flip += 1
if coin == 1:
heads += 1
print(heads,seq)
#solution 2
def seq_sum(n):
flip = 0
seq = list() #create a list to store every random value
while flip < n: # if want to generate n values, the while loop only need compare 0,1,2,...n-1 times, so you need <, not <=.
coin = random.randint(0,1) # coin has only two sides
seq.append(coin)
flip += 1
return seq
# print(heads) # it is not good idea to print data in function.
random_list = seq_sum(55)
head_num = sum(random_list)
答案 3 :(得分:0)
我不知道我是否理解正确,但这是我非常简单的解决方案。
import random
def seq_sum(n):
""" input: n, generate a sequence of n random coin flips
output: return the number of heads
Hint: For simplicity, use 1,0 to represent head,tails
"""
flip = 0
heads = 0
outcomes=[]
while flip < n:
coin = random.randint(0,2)
outcomes.append(coin)
flip += 1
if coin == 1:
heads += 1
print(heads)
print(outcomes)
--------
控制台输出:
>>>seq_sum(3)
>>>2
>>>[1, 2, 1]
答案 4 :(得分:0)
当我尝试打印(列表(头))时,我收到以下错误消息:
TypeError: 'int' object is not iterable
让我们从这里开始吧。从开始到结束,heads
始终是一个整数。因此,当您将list( )
放在heads
周围时,Python会抱怨您正在向list
提供一个不可迭代的整数。
外卖1 :某些对象只能使用某些类型的参数。
第二站:我想要一个列表来存储头部和尾部。我该怎么办?一种方法是创建一个列表来存储它。
my_list = [] # or list()
要添加到列表,您可以使用append
方法。 append
方法将一个元素添加到列表的末尾。
my_list.append(1)
# now my_list is [1]
my_list.append(0)
# now my_list looks like [1, 0]
第三个目标:我想随机生成0和1来表示尾巴和头部。你真的在做你想做的事吗?请注意所调用的功能,尤其是那些您不熟悉的功能。了解这些功能的作用。
random.randint(a,b) 返回随机整数N,使得a <= N <= b。 - randint
的文档
randint(0, 2)
将随机生成0,1,2,它可以代表头部,尾部和......哦,我们没有3个要表示的东西。
目标4:是否要返回/保存值以供日后使用?或者只是把它打印出来?考虑一下并做出决定。你知道你一次可以翻两件事吗?
def bar():
return 1, 2
c = bar() # c is a tuple that holds two values, 0 and 1 now!
# c[0] == 1 # access the first element with index 0
# c[1] == 2
希望通过这些,您可以编写自己的答案。