所以我需要在python中创建一个函数,要求用户输入数字并在完成后输入end。之后,我需要计算输入的数字总和,不包括最大数字。(即,如果用户输入 20、50 和 100,则总和为 70)
所以对我来说,它循环输入,直到用户输入单词结束:
def excludeMax():
while True:
result = input('Enter next number or end:')
if (result == 'end'):
break
这看起来像你要找的。
def excludeMax():
numbers = []
while True:
result = input('Enter next number or end:')
if (result == 'end'):
break
else:
numbers.append(result)
# notice this is after the loop
numbers.remove(max(numbers))
return sum(numbers)
只需对其进行排序,然后添加一个切片:
def exclude_max():
return sum(sorted(map(int, iter(lambda: input('Enter next number or end: '), 'end')))[:-1])
结果:
>>> exclude_max()
Enter next number or end: 20
Enter next number or end: 50
Enter next number or end: 100
Enter next number or end: end
70
将所有数字输入放入列表中。如果您看到结束,请从while
循环中断。退出 while 循环后,从列表中删除 max 元素(例如,lst.remove(max(list))
)。最后,通过sum(lst)
获得总和。
方法 1:此方法不需要临时列表和排序。仅排除最大数字之一(不处理重复项)
def excludeMax():
biggest_sof_far = None
sum_of_inputs = 0
while True:
result = input('Enter next number or end:')
if result == 'end':
break
if biggest_sof_far == None:
biggest_sof_far = result
elif result > biggest_sof_far:
sum_of_inputs += biggest_sof_far
biggest_sof_far = result
else:
sum_of_inputs += result
return sum_of_inputs
if __name__ == "__main__":
print excludeMax()
方法 2:使用临时列表(增加空间复杂度)并在列表上进行排序和求和(增加时间复杂度)。 这只排除了一个最大数字(不处理重复项)
def excludeMax():
input_numbers = []
while True:
result = input('Enter next number or end:')
if result == 'end':
break
input_numbers.append(result)
input_numbers.sort()
return sum(input_numbers[:-1])
if __name__ == "__main__":
print excludeMax()
这两种方法都假定您只想排除一个 max 元素。 如果要排除所有最大元素(在最大数字重复的情况下):
方法 1:甚至排除重复的最大数字
def excludeMax():
biggest_sof_far = None
sum_of_inputs = 0
while True:
result = input('Enter next number or end:')
if result == 'end':
break
if biggest_sof_far == None:
biggest_sof_far = result
elif result == biggest_sof_far:
pass
elif result > biggest_sof_far:
sum_of_inputs += biggest_sof_far
biggest_sof_far = result
else:
sum_of_inputs += result
return sum_of_inputs
if __name__ == "__main__":
print excludeMax()
方法 2:甚至排除重复的最大数字
def excludeMax():
input_numbers = []
while True:
result = input('Enter next number or end:')
if result == 'end':
break
input_numbers.append(result)
input_numbers.sort()
omit_till_index = -1
input_len = len(input_numbers)
while input_len > -omit_till_index and
input_numbers[omit_till_index] == input_numbers[omit_till_index-1]:
omit_till_index = omit_till_index-1
return sum(input_numbers[:omit_till_index])
if __name__ == "__main__":
print excludeMax()
在你的循环中,将所有输入值附加到一个列表中(如果不是'end')。之后,排序列表就位并计算 list[:-1] 的总和(为您提供没有最后一个元素的列表)。
在代码中:
numbers = []
def excludeMax():
while True:
result = input('Enter next number or end:')
if (result == 'end'):
break
else:
numbers.append(result)
numbers.sort()
sum_numbers = sum(numbers[:-1])