代码使用排序列表和用户输入找不到正确的最小值或最大值?

时间:2018-06-15 19:16:40

标签: python list sorting

我是python的新手,我尝试提示用户输入5个整数,然后我会找到最小值,最大值和平均值(以后会有其他内容)。所以我提示并尝试检查以确保输入是整数。然后我尝试构建一个列表并对其进行排序以找到最小值和最大值。问题是当我在一个数字中有多个数字时,并不总是找到正确的迷你,最大和平均值。

感谢任何帮助。

这是我的代码:

# Define strings minStr = 'Minimum Value is: ' maxStr = 'Maximum Value is: ' aveStr = 'Average Value is: '


# Prompt User for Integers:

strMontyPython = 'My hovercraft is full of eels.  Let\'s sample them.' strMP2 = ' Take 5 samples and enter how many eels you saw on my hovercraft each time below.' print(strMontyPython + strMP2)

# First integer input int1 =input("Please Enter an Eel Count (as an integer).")
# Show knowledge of exceptions initially to check if integer was entered: try:
    val = int(int1) except ValueError:
    print("That's not an integer! \n Fish slap! \n Your min, max, and average will not be computed.")
         print('You\'ve Entered: ' + int1)
#  (Repeat 4 more times)  
# Define functions and useage   
# Make a list to compute min, max values: intList = [int1, int2, int3, int4, int5] 
# Sort list intList.sort()
# Find min print(minStr + intList[0]) 
# Find max print(maxStr + intList[len(intList)-1])  
# Find average value:

def averageEels(int1,int2,int3,int4,int5):
    aveEels = (int1+int2+int3+int4+int5) / (5)

    return aveEels
     print(aveStr + str(averageEels(int(int1),int(int2),int(int3),int(int4),int(int5))))

1 个答案:

答案 0 :(得分:0)

仔细看 - 你正在宣布

intList = [int1, int2, int3, ...]

当你阅读整数时,它们自然会被读作字符串。您可以像使用

一样将它们强制转换为整数
val = int(int1)

int1仍为字符串,val为int。由于字符串按字典顺序排序,10将出现在2之前,依此类推。解决方案是确保int1在被添加到列表之前被转换为整数。

这里使用for循环快速清理代码,而不是一遍又一遍地重复代码:

intList = []
for _ in range(0, 5):
    try: 
        val = input("Please Enter an Eel Count (as an integer).")
        intList.append( int(val) )
    except ValueError:
         print("That's not an integer! ...")

此外,python实际上有内置的方法来计算像列表这样的可迭代对象的最小值,最大值和平均值(通过" sum / size"):

minimum = min(intList)
maximum = max(intList)
average = sum(intList) / len(intList)

如果您愿意,您仍然可以通过对列表进行排序来找到这些值,但是没有必要。

另一个单挑:如果你想访问列表的最后一个元素,你可以做

intList[-1]

python中的否定列表索引从列表的后面开始计算:-1是最后一个元素,-2是倒数第二个,依此类推。无需len(intList) - 1