【问题标题】:Generating a list of random numbers, then sorting them生成随机数列表,然后对它们进行排序
【发布时间】:2015-04-20 11:21:12
【问题描述】:

python新手,理解小程序的逻辑,但有点卡住。这就是我想要做的。

我希望程序生成 5 个随机数,然后使用冒泡排序对它们进行排序。然后用户需要按任意顺序输入 5 个数字,程序会说出它是否在里面。

这是我到目前为止所做的。

import random

def randomNum()
    list = []
    list.append(random.sample(range(1, 100), 5))
    print list

python 的第一天,所以我在语法方面有点搞砸了,但一开始看不出数字生成函数有什么问题。

然后,这就是我要做的冒泡排序。

def bubble(list):
    length = len(list) - 1
    unsorted = True
    while unsorted:
        unsorted = False
        for element in range(0,length):
            #unsorted = False
            if badList[element] > list[element + 1]:
                 hold = list[element + 1]
                 list[element + 1] = list[element]
                 list[element] = hold
                 unsorted = True
                 print list
             else:
                 unsorted = True

     return list

在那之后,我不确定如何获取输入并比较它以查看它是否在该列表中。这是我目前所拥有的。

任何指针?

【问题讨论】:

  • 您可以使用以下方式输入:feedback = raw_input("Please enter something? :")print feedback
  • 不要使用 list 作为名称,因为它会影响 Python 内置 list()
  • randomNum() 有许多缺陷... 1) 一个函数通常 returns 一个对象,你的没有。 2)random.sample() 返回一个列表,这样就不需要外部列表了。 3)最好将参数传递给函数。 4)总而言之,您也可以直接拨打random.sample()
  • 感谢您的小指点,我已经更正了第一点。其余部分仍在工作

标签: python sorting


【解决方案1】:

如何获取输入

使用 raw_input() (Python 2) 或 input() (Python 3)。切勿在 Python 2 中使用 input(),因为这是一个严重的安全问题。

通用解决方案

如果您正在编写一个使用用户输入的模块并且要与两个 Python 版本一起使用,您可以使用 Python 的 try ... except 机制

try:
    input = raw_input
except NameError:
    pass
...
answer = input('Which is smaller, 3 or 4? ')

输入处理

请注意,input() 返回一个string,即一个字符序列,因此如果您需要一个数值来进行以下计算,您可能希望进一步处理answer 罢工>

answer = input('Which is smaller, 3 or 4? ')
min_squared = answer**2

answer = input('Which is smaller, 3 or 4? ')
answer = int(answer)
min_squared = answer**2

为此,您可以使用int() 内置函数,如上例所示,如果需要浮点数,则使用float()

如何检查是否包含

如果你想检查一个元素是否包含在容器中,你应该使用in操作符,

 if 4 in [1,2,3,4,5]: print('Found!')
 ...
 if int(answer) in sorted_list:
     print('You win!')

警告

Python 为您提供不同类型的容器,list's tuple's dict's 和 set's。其中一些已针对测试包含(即dict's 和set's)进行了优化,而其他则必须逐个元素地扫描以检查是否包含。

虽然此问题与您的情况无关,但如果您必须根据数百万个项目的列表检查是否包含数千个项目,则对容器使用 set 而不是 list 会导致很多问题,更好的性能。

【讨论】:

    【解决方案2】:

    首先我要给你看完整的代码,后面我会做cmets:

    import random
    
    
    def randomNum():
        return random.sample(range(1, 100), 5)
    
    numbers_list = randomNum()
    # print numbers_list
    
    for _ in xrange(5):
        num = int(raw_input())
        if num in numbers_list:
            print "%d is in the list" % num
        else:
            print "There is no %d in the list" % num
    

    现在一步一步来:

    1

    def randomNum():
        return random.sample(range(1, 100), 5)
    

    这里我们创建一个包含 5 个随机数的列表,然后返回它(我们稍后会用到它,所以我们使用 returnprint)。 random.sample 本身就是列表,所以我们不需要将它附加到任何地方,因为我们将具有类似 [[1,2,3]] 的结构,这不是我们想要的。

    2

    numbers_list = randomNum()
    # print numbers_list
    

    这里我们创建一个随机数列表,由randomNum()生成

    3

    for _ in xrange(5):
        num = int(raw_input())
        if num in numbers_list:
            print "%d is in the list" % num
        else:
            print "There is no %d in the list" % num
    

    我们连续 5 次获取用户编号并检查它是否在列表中。我们使用in。我认为很容易理解in 的作用。如果列表中有 num,我们打印 num is in the list,否则我们打印 num isn't in the list

    5

    我们在这里不使用排序,因为in 不需要打乱列表。

    【讨论】:

    • 不不不,请不要使用list作为名称,它是内置的(在解释器中尝试print list(1,2,3,4)),你最好别管它。
    • @gboffi 啊,是的,你是对的,我只是在玩他的解决方案并没有改变它。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2021-06-28
    相关资源
    最近更新 更多