在 Python 中生成随机长度随机数列表的程序

Program to generate a random length list of random numbers in Python

我对编程和像这样的网站还很陌生,实际上才刚刚开始 class。我了解 Python 的基础知识,这两天我一直在用头撞墙。

以下是程序的要求,紧随其后的是我对代码的尴尬尝试。我不是在寻找它给我,但我不知道如何前进。

  1. 在 main 中,生成一个大于 5 且小于 13 的随机 integer
  2. 将此数字打印在自己的行上。
  3. 以随机整数作为唯一参数调用 makelist 函数。
  4. makelist函数内部:

    • 创建一个空列表。

    • 使用循环向列表追加等于随机整数参数的元素数。所有新的列表元素必须是 1 到 100(含)之间的随机整数。重复是可以的。

    • Return 主列表。

  5. 返回 main,捕获返回的列表并对其进行排序。

  6. 最后,使用 for 循环显示排序后的列表元素,全部在一行上,
  7. 以单个空格分隔。

到目前为止的代码:

import random

def main():
    random_int = random.randint(6, 12)
    print (random_int)
    makelist()

def makelist():
    num_list = []
    for count in range(1, 101)
        num_list.append(random_int)

main()

你已经完成了大部分。

为了在 makelist 中创建一个长度等于您在 main() 中获得的随机整数的新列表,您必须通过参数传递该数字,如下面的代码。

此外,您必须将 makelist 到 return 分配给 main 中的一个变量,这样您就可以使用 makelist 产生的任何输出。这可以简单地通过 var = makelist(random_int) 完成。我称这个变量为 elements.

最后,有几个选项可以对列表进行排序。其中之一是使用 Python 的内置函数 sorted 并将最终列表作为参数传递。遍历它并打印每个值。

import random

def main():
    random_int = random.randint(6, 12)
    print (random_int)
    elements = makelist(random_int)
    for i in sorted(elements):
        print (i,)

def makelist(random_int):
    num_list = []
    for count in range(random_int):
        num_list.append(random.randint(1, 100))
    return num_list

main()

如果您只是想要现有程序的更好版本,我已经修复了您的代码并将其压缩为下面的单个函数。但是,我认为编辑您已经编写的内容比重做更有建设性 - 有关修复代码的详细信息,请参阅我的其余答案。**

from random import randint

def main():
    random_int = random.randint(6, 13)
    print(random_int)
    rand_list = [randint(1, 100) for _ in range(random_int)]
    return sorted(rand_list)

print main()

In main, generate a random integer that is greater than 5 and less than 13.

  1. random_int 应分配给 random.randint(6, 12),因为 randint 函数使用包含范围参数

Call the makelist function with the random integer as sole argument.

  1. 您的 make_list 函数目前没有参数,所以让我们将其定义更改为 def make_list(list_lengh):。现在我们可以传入 main() 中的随机整数作为输入。

use a loop to append to the list a number of elements equal to the random integer argument.

  1. make_list function 的第二行代码中,您使用默认参数 (1, 101) 调用范围,这不是您想要的。你想在 list_length 上调用范围,因为你想循环的次数与在 main().
  2. 中创建的随机整数相同

All new list elements must be random integers ranging from 1 to 100, inclusive.

  1. 你不想要 num_list.append(random_int)。那只会给你 [random_int]*random_int。而是附加 random.randint(1, 101).

Finally, use a for loop to display the sorted list elements, all on one line

  1. 有多种方法可以做到这一点,但由于您想将所有整数打印到一行,让我们将整数附加到带有循环的字符串,然后 return 处的字符串结束。

像这样:

num_string = ""
for i in sorted(rand_list):
    num_string += str(i) + " "
return num_string

完成所有这些修改后,离开始的地方不远了,但代码现在具有所需的行为。

import random

def main():
    random_int = random.randint(6, 13)
    print(random_int)
    rand_list = make_list(random_int)
    num_string = ""
    for i in sorted(rand_list):
        num_string += str(i) + " "
    return num_string

def make_list(list_length):
    num_list = []
    for count in range(list_length):
        num_list.append(random.randint(1, 101))
    return num_list

print main()

示例输出:

10
20 63 63 71 78 83 83 84 87 94

可能是:

import random

def makelist(i):
    list_ = []
    for c in range(i):
        list_.append(random.randint(1, 100))
    return list_

def main():
    c = random.randint(5, 13)
    print c
    catched_list = makelist(c)
    s = ' ' . join([str(x) for x in catched_list])
    print s
main()

您遇到的问题主要是句法问题。

正在创建您的 random_int 变量,但它也保存在 main() 函数中。它需要向上传递到更大的命名空间,或者通过在定义函数之前创建变量,或者通过使用 global 这样:

def main():
    global random_int = random.randint(5, 13)

您的 makelist() 函数需要将 random_int 作为定义中的声明变量 - 这是赋值的 'as an argument' 部分。看起来像:

def makelist(random_int):

您还需要将 for count in range() 行更改为 for count in random.randrange(1, 101)

import random


def main():
    random_int = random.randint(6, 12)
    print (random_int)
    for i in sorted(makelist(random_int)):
        print i,   
def makelist(random_int):
    num_list = []
    for count in range(random_int):
        rand=random.randint(1,100)
        num_list.append(rand)
    return num_list

main()

另一个解决方案:

from random import randint

def makelist(count):
    return [randint(1, 100) for _ in range(count)]

def main():
    random_integer = randint(6, 12)  # Generate a random integer where 5 < i < 13
    print(random_integer)  # Print this integer on its own line
    unsorted_list = makelist(count=random_integer)  # Make a list
    sorted_list = sorted(unsorted_list)  # Sort the list
    print(' ' . join([str(i) for i in sorted_list]))  # Print it out

main()

最主要的是makelist returns a list comprehension,这完全没有必要使用。这些答案你应该已经足够了解了。

David当然是对的。 makelist 不需要存在,尽管它确实为练习增加了一点可读性(并且可能是 "required," 正如 OP 指南所建议的那样)。您可以像这样轻松地一路走下去:

from random import randint

count = randint(6, 12)
print(count)
print(' ' . join([str(i) for i in sorted([randint(1, 100) for _ in range(count)])]))

这取决于你的兔子洞有多深。我当然不会把它交给教授...

这是最短最智能的代码:

import random

def main():
    global random_int
    random_int = random.randint(5, 13)
    print random_int
    makelist(random_int)
    random_list.sort
    string = ' ' . join([str(x) for x in random_list])
    print string

def makelist(list_length):
    global random_list
    random_list = []
    for x in range (list_length):
        random_list.append(random.randint(0, 100))

main()