【问题标题】:My First Ever Python Program我的第一个 Python 程序
【发布时间】:2017-09-05 19:57:54
【问题描述】:

各位网友,

几天前我刚开始使用 Python,我正在尝试创建一个入门程序。我要做的就是创建一些可以从用户那里获取一组数字(非负数)的输入,并打印该集合中最高数字的值。

我已经阅读了一些关于可能能够完成这项任务的递归函数的内容,但就像我说的,我是新手!如果你们中的任何一位专业人士可以向我展示一些可以做到的事情,我将非常感激。

def Max(list):
    if len(list) == 1:
        return list[0]
    else:
        m = Max(list[1:])
        return m if m > list[0] else list[0]

def main():
    list = eval(raw_input(" please enter a list of numbers: "))
    print("the largest number is: ", Max(list))

main()

【问题讨论】:

  • 你现在所拥有的究竟有什么问题?
  • 通常你需要遍历列表并找到最大值。这不是在这里完成的。另外,请不要养成这样使用eval的习惯。
  • 你不需要Max 一个。使用内置函数max
  • 他正在学习@ChristianDean,递归max 是个不错的练习
  • 我理解你的观点@Daniel。但是,由于 OP 在标题中声明了“我的第一个 Python 程序”,我想他可能没有意识到他试图用 Max 实现的功能已经用内置的 max 函数完成了。如果他知道这一点并且只是出于教育目的尝试创建Max,那也完全没问题。我的目的只是让他知道。

标签: python sorting math numbers


【解决方案1】:

你的代码有几个问题:

  • 不要像list一样使用Python keywords作为变量名
  • 在接受用户输入时不要使用eval()
  • 您可以使用内置的max(),除非您想创建用于教育目的的函数

所以这里有一个更好的代码版本:

def main():

    my_list = raw_input(" please enter a list of numbers: ").split()
    my_list = map(int, my_list) # convert each item to int
    print("the largest number is: ", max(my_list))

main()

如果您使用 Python3,请将 raw_input() 更改为 input(),如果您使用 Python2,请将 print('item1', 'item2') 更改为 print 'item1', 'item2'

编辑:

您也可以使用带有 max() 的生成器表达式来执行此操作,如下所示:

def main():

    my_list = raw_input(" please enter a list of numbers: ").split()
    max_num = max(int(x) for x in my_list)
    print("the largest number is: {}".format(max_num))

main()

【讨论】:

  • 解释 map 如何替换 eval 将是有益的。
  • map 很棒,但列表推导往往更明确,因此更“pythonic”:my_list = [int(element) for element in my_list]。否则,这里有很好的解决方案!
  • @slightlynybbled 带有max() 的生成器也会更好,我现在编辑
  • 这更有意义,谢谢你们。我想简要解释一下为什么 map 替换 eval 只是为了帮助我理解。
  • eval() 使用不安全,因为它会评估任何传递的表达式,您可以使用 map() 对列表执行特定操作,否则您可以使用列表理解或生成器表达式,如我刚才放的例子
【解决方案2】:

单行答案:

print (max(list(map(int,input().split()))))

解释:

a=raw_input() #Take input in string.
b=a.split() #Split string by space.
c=map(int,b) # Convert each token into int.
d=max(c) #Evalute max element from list using max function.
print (d)

编辑:

print (max(map(int,input().split())))

【讨论】:

  • 对于新手来说,很容易定义完整的流程。
  • 也许吧,但这样的教学也可以让他开始创建无用的中间列表......然后人们说 python 运行缓慢并且它在内存中贪婪;)
猜你喜欢
  • 2013-12-26
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2012-05-08
  • 2014-06-13
  • 2018-12-08
  • 2016-05-10
  • 1970-01-01
相关资源
最近更新 更多