首页 > 解决方案 > 如果输入数字 0,如何结束 while 循环并按照其他说明进行操作

问题描述

我的代码将所有用户输入的项目放入一个列表中我希望它在输入 0 时停止并遵循其他命令,例如对列表进行排序,删除最高和最低值,然后找到它们的平均值 这是代码所以远的:

i = 0
sizes = []
while i == 0:
    size = int(input("Enter the weight of your parcel in grams, enter 0 when done: "))
    sizes.append(size)
    if size < 1:
        break
sortedsizes = sorted(sizes)
largest = max(sizes)
smallest = min(sizes)
sizes.remove(largest)
sizes.remove(smallest)
print(sizes)

标签: pythonpython-3.x

解决方案


您不需要i也不想要重量小于 0 的包裹。您可能要考虑使用float而不是int- 我住的地方我们测量kg包裹或g字母 - 两者都将包括分数(1.235kg 或 5.28g)。

如果有人输入"22kg"任何数字转换将崩溃 - 你应该提防它:

sizes = []
while True:
    try:
        size = int(input("Enter the weight of your parcel in grams, enter 0 when done: "))
        if size > 0:  
            sizes.append(size)
        elif size == 0:
            break
        else:
            raise ValueError()  # negative weight
    except ValueError:
        print("Only positive numbers or 0 to quit. Do not input text or kg/g/mg.")

sortedsizes = sorted(sizes) # you do nothing with this - why sort at all?
largest = max(sizes)
smallest = min(sizes)
sizes.remove(largest)
sizes.remove(smallest)
print(sizes)  # this prints the unsorted list that got min/max removed...

输出:

Enter the weight of your parcel in grams, enter 0 when done: 4 
Enter the weight of your parcel in grams, enter 0 when done: 3 
Enter the weight of your parcel in grams, enter 0 when done: 5 
Enter the weight of your parcel in grams, enter 0 when done: 6 
Enter the weight of your parcel in grams, enter 0 when done: -1 
Only positive numbers or 0 to quit. Do not input text or kg/g/mg.
Enter the weight of your parcel in grams, enter 0 when done: DONE 
Only positive numbers or 0 to quit. Do not input text or kg/g/mg. 
Enter the weight of your parcel in grams, enter 0 when done: 2 
Enter the weight of your parcel in grams, enter 0 when done: 0

[4, 3, 5]  # this is the unsorted list that got min/max removed...

如果您只想从排序列表中删除 1 个最大值和 1 个最小值,您可以将其简单化:

sortedsizes = sorted(sizes)  
maxval = sortedsizes.pop()    # remove last one from sortedsizes  (== max)
minval = sortedsizes.pop(0)   # remove first one from sortedsizes (== min)
print(sortedsizes)            # print the sorted values

独库:


推荐阅读