如何要求用户输入一系列数字并返回除最大数字之外的所有数字的总和



所以我需要在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])

相关内容

  • 没有找到相关文章

最新更新