如何向用户询问一系列数字并返回除最大数字之外的所有数字的总和?

时间:2016-04-24 06:39:05

标签: python function user-input

所以我需要在python中创建一个函数,要求用户输入数字并在完成后输入end。之后我需要计算输入数字的总和,不包括最大数字。 (即如果用户输入20,50和100,则总和将为70)

所以我有这个循环输入,直到用户输入单词结束:

def excludeMax():
   while True:
      result = input('Enter next number or end:')
      if (result == 'end'):
        break

5 个答案:

答案 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()