如何在python中输出我的函数数值作为列表

时间:2018-01-03 00:51:21

标签: python function

这是我的功能:

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;对象不可迭代

5 个答案:

答案 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 

希望通过这些,您可以编写自己的答案。