用于在Python

时间:2015-05-21 23:44:32

标签: python list loops random

我对编程和这样的网站都很陌生,实际上我刚开始上课。我理解Python的基础知识,现在已经用两天时间撞到了墙上。

以下是我之后对代码进行尴尬尝试所遵循的程序要求。我不是想把它交给我,但我无法弄清楚如何前进。

  1. 主要生成大于5且小于13的随机integer
  2. 在自己的行上打印此号码。
  3. 使用随机整数作为唯一参数调用makelist函数。
  4. makelist函数内部:

    • 制作一个空列表。

    • 使用循环在列表中附加一些等于随机整数参数的元素。所有新的列表元素必须是1到100之间的随机整数,包括1和100。重复是可以的。

    • 将列表返回主页。

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

  6. 最后,使用for循环显示已排序的列表元素,所有这些都在一行上,
  7. 以单一空格分隔。
  8. 到目前为止

    代码:

    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()
    

7 个答案:

答案 0 :(得分:2)

另一种解决方案:

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会返回list comprehension,这完全没有必要使用。你应该对所有这些答案都做得足够清楚。

当然,

David是对的。 makelist不需要存在,但它确实可以为练习添加一些可读性(并且可能是&#34;必需的,&#34;正如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)])]))

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

答案 1 :(得分:1)

你已经完成了大部分工作。

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

此外,您必须指定makelist以返回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()

答案 2 :(得分:1)

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

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()
  

在main中,生成一个大于5且小于的随机整数   比13岁。

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

    使用随机整数作为唯一参数调用makelist函数。

    1. 您的make_list函数目前不带参数,所以我们将它的定义更改为def make_list(list_lengh):。现在我们可以传递来自main()的随机整数作为输入。
    2.   

      使用循环向列表附加一些等于随机整数参数的元素。

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

        所有新的列表元素必须是1到100之间的随机整数,   包容。

        1. 您不希望num_list.append(random_int)。这只会给你[random_int]*random_int。而是追加random.randint(1, 101)
        2.   

          最后,使用for循环显示已排序的列表元素,全部在一行

          1. 有很多方法可以做到这一点,但是由于你想要将所有整数打印到一行上,让我们将整数附加到带有循环的字符串,然后在结尾处返回字符串。
          2. 像这样:

            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
            

答案 3 :(得分:0)

可能是:

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()

答案 4 :(得分:0)

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()

答案 5 :(得分:0)

这是最简短,最智能的代码:

{{1}}

答案 6 :(得分:-1)

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

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

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

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

def makelist(random_int):

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