返回一个随机的整数列表,Python 3.3

时间:2015-03-02 21:21:57

标签: python

现在我正在尝试编写一个需要20个数字的程序,并且可以使用这些数字执行各种任务,例如查找最小/最大整数,查找总数,平均值等。

我的核心程序正在运行,但我尝试添加一个允许用户选择一系列数字的附加选项,并创建一个包含20个值的列表。据我所知,我也写得正确。

我遇到的主要问题是,当我尝试返回列表以便它可以存储在先前定义的列表中时,它不会存储任何值。

这是我为用户输入自己输入的20个值的函数:

#Get Number List
def input_numbers():
    print("Please enter a series of 20 numbers, pressing enter after each number.")
    numList=[int(input('Enter a number: ')) for i in range(20)]
    return numList

这就像一个魅力,没有问题。

另一方面,这是我随机生成的列表:

#Randomly generate 20 numbers.
import random
def randomly_generate():
    number1= int(input("Please enter the lower number: "))
    number2= int(input("Please enter the higher number: "))
    numList=random.sample(range(number1, number2), 20)
    print(numList)
    return numList

澄清一下:我只是在函数内打印,看看随机数生成器是否正常工作,它是。它将在指定范围内打印20个值。

然而,当我返回numList时,它没有像第一个函数那样正确存储。这会给我带来问题,因为我无法使用空列表执行其他功能。

编辑:这是导致问题的原因:我正在返回值,但没有重新定义numList,从而产生了我的问题。

        elif choice == RANDOMLY_GENERATE:
            randomly_generate()

#Randomly generate 20 numbers
#Import Random
import random
def randomly_generate():
    number1= int(input("Please enter the lower number: "))
    number2= int(input("Please enter the higher number: "))
    numList=random.sample(range(number1, number2), 20)
    print(numList)
    return numList

3 个答案:

答案 0 :(得分:1)

这是一个简单的例子:

import random

def randomly_generate():
    number1= int(input("Please enter the lower number: "))
    number2= int(input("Please enter the higher number: "))
    numList=random.sample(range(number1, number2), 20)
    print(numList)
    return numList

if __name__ == "__main__":
    returned_list = randomly_generate()

    print(returned_list)

查看您的代码:

#Randomly generate 20 numbers
elif choice == RANDOMLY_GENERATE:
    randomly_generate()

您可以看到您只是调用函数,但没有将函数的返回值分配给任何变量。你需要做这样的事情:

r_list = []
#...

#Randomly generate 20 numbers
elif choice == RANDOMLY_GENERATE:
    r_list = randomly_generate()

答案 1 :(得分:0)

random.sample(sample, k)期望样本大小为k。如果使用输入0和20(元素0..19)运行第二个函数,它将正常工作。您要使用的是函数random.randrange(sample)

https://docs.python.org/2/library/random.html#random.randrange

#Randomly generate 20 numbers.
import random
def randomly_generate():
    number1= int(input("Please enter the lower number: "))
    number2= int(input("Please enter the higher number: "))
    numList= [ random.randrange(number1, number2) for i in range(20) ]
    print(numList)
    return numList

答案 2 :(得分:0)

我还建议使用xrange()迭代器来调用random.sample;在documentation中明确指出使用xrange()迭代器而不是创建range()的列表。

  

要从一系列整数中选择样本,请使用xrange()对象作为>参数。对于从大型>人口样本(xrange(10000000),60)进行采样,这尤其快速且节省空间。

大多数情况下,您必须以某种方式将函数的返回值存储在变量中。如果你这样做

numList = []

你的numList什么都不会发生,因为你的numList只存在于函数范围内。您必须捕获返回值以使其在主函数范围内可用

main()
    numList = []
    numList = getrandomList()
    print(numList)

这应该这样做。