我怎样才能改进此 Python 代码以提高效率?

How can I improve this Python code to be more efficient?

我刚刚开始学习 Python(我第一次涉足编码),这是我第一次发帖...我希望我问这个问题不是在滥用论坛(我'我实际上是在请专家帮助我学习)。如果这在社区中不受欢迎,请告诉我。

对于密歇根公开课的这个作业,我被指示要求用户输入,直到用户输入 "done",此时代码应该计算最大、最小、总和和平均的。在我所有的测试运行中,它运行良好。但我觉得可能有一种更简单的方法来编写这段代码。谁能提供改进建议?

largest = None
smallest = None
count = 0
sum = 0
while True:
    try:
        num = raw_input("Enter a number: ")
        if num == "done" : break
        num = float(num)
        count = count + 1
        sum = sum + num
        avg = sum/count
        if largest is None:
            largest = num
        if smallest is None:
            smallest = num
        if num < smallest:
            smallest = num
        elif num > largest:
            largest = num
        continue
    except: print 'Invalid input'

print "Maximum is", int(largest)
print "Minimum is", int(smallest)
print "Count:", int(count)
print "Sum:", int(sum)
print "Average:", avg

这里有一些东西:

  • 您可以删除 continue 语句,因为无论如何它都是循环的结尾;
  • 您可以将 if 语句压缩到 if largest is None or num > largest: 这将 短路 并使循环变小;
  • 你可以用x += y代替x = x + y;和
  • 您不必在 循环中计算平均值 ;循环结束时计算一次就足够了。

所以:

largest = None
smallest = None
count = 0
sum = 0
while True:
    try:
        num = raw_input("Enter a number: ")
        if num == "done" : break
        num = float(num)
        count += 1
        sum += num
        if largest is None or num > largest:
            largest = num
        if smallest is None or num < smallest:
            smallest = num
    except: print 'Invalid input'

print "Maximum is", int(largest)
print "Minimum is", int(smallest)
print "Count:", int(count)
print "Sum:", int(sum)
print "Average:", sum/count

但是就大哦而言,你不能提高多少:求和等只需要O(n)和无论如何,它也需要 O(n) 来读取输入。

还有一些软件工程建议:不要使用一揽子异常,始终指定您期望的异常:

largest = None
smallest = None
count = 0
sum = 0
while True:
    try:
        num = raw_input("Enter a number: ")
        if num == "done" : break
        num = float(num)
        count += 1
        sum += num
        if largest is None or num > largest:
            largest = num
        if smallest is None or num < smallest:
            smallest = num
    except <b>ValueError</b>: print 'Invalid input'

print "Maximum is", int(largest)
print "Minimum is", int(smallest)
print "Count:", int(count)
print "Sum:", int(sum)
print "Average:", sum/count

实现此目的的另一种方法是将所有输入存储在一个列表中,然后使用 built-ins min()max()len()sum() 查找值:

num=raw_input("Enter a number: ")
nums=[]
while num!="done":       #check if user has finished entering inputs
    try:
        nums.append(int(num))       #append the input as an integer to a list
        num=raw_input("Enter a number: ")   #get another input
    except ValueError:
        print "Invalid input"

print "Maximum is",max(nums)
print "Minimum is",min(nums)
print "Count:",len(nums)
print "Sum: ",sum(nums)
print "Average: ",sum(nums)/len(nums)

输出:

Enter a number: 1
Enter a number: 2
Enter a number: 3
Enter a number: 4
Enter a number: 5
Enter a number: 6
Enter a number: done
Maximum is 6
Minimum is 1
Count: 6
Sum:  21
Average:  3.5