所以我需要在python中创建一个函数,要求用户输入数字并在完成后输入end。之后我需要计算输入数字的总和,不包括最大数字。 (即如果用户输入20,50和100,则总和将为70)
所以我有这个循环输入,直到用户输入单词结束:
def excludeMax():
while True:
result = input('Enter next number or end:')
if (result == 'end'):
break
答案 0 :(得分:3)
这看起来就像你要找的那样。
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)
答案 1 :(得分:2)
只需对其进行排序,然后添加切片:
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
答案 2 :(得分:0)
在你的循环中将所有输入值附加到列表中(如果不是'结束')。在该排序列表就位后,列表[: - 1]的计算总和(给出没有最后一个元素的列表)。
在代码中:
Select * messagesTable;
答案 3 :(得分:0)
将所有数字输入放入列表中。如果您看到结束,请从while
循环中断。退出while循环后,从列表中删除max元素(例如lst.remove(max(list))
)。最后,通过sum(lst)
获得总和。
答案 4 :(得分:0)
方法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()