2016-04-24 10 views
1

Also muss ich eine Funktion in Python erstellen, die den Benutzer zur Eingabe von Zahlen auffordert und Ende eingeben, wenn Sie fertig sind. Danach muss ich die Summe der eingegebenen Zahlen ohne die maximale Anzahl berechnen. (Dh wenn der Benutzer 20 eingegeben, 50 und 100 die Summe wäre 70)Wie man Benutzer nach einer Reihe von Zahlen fragt und die Summe aller Zahlen außer der maximalen Zahl zurückgibt?

So denn ich dies haben die Eingangsschleifen, bis der Benutzer das Wortende Eingänge:

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

Antwort

0

In der Schleife anhängen alle Eingaben Werte zu einer Liste (wenn nicht "Ende"). Nach dieser Sortierung Liste und Berechnung der Summe für die Liste [: - 1] (gibt Ihnen die Liste ohne das letzte Element).

In Code:

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]) 
3

Das sieht aus wie, was Sie suchen.

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) 
+0

können Sie einfach 'result.remove (max (Zahlen))' – ozgur

+0

@ozgur wahr, habe Python in einer Weile nicht geübt. –

2

einfach es sortiert und dann ein Stück aufaddieren:

def exclude_max(): 
    return sum(sorted(map(int, iter(lambda: input('Enter next number or end: '), 'end')))[:-1]) 

Ergebnis:

>>> 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 
+3

Beruhigen Sie sich, ich glaube nicht, dass er Iteratoren oder Karten oder Lambdas in seinen Hausaufgaben verwenden soll xD –

+0

Ich denke, tun 'Ende =' Ende'' und 'iter (Lambda: Eingabe ('nächste Nummer oder Ende eingeben: '), end) 'wäre eine bessere Wahl zu verhindern, dass' NameError: name' end 'nicht definiert ist' Fehler für den Fall, dass der Benutzer nicht '' end''als Zeichenfolge eingibt – ozgur

+0

@ TigerhawkT2 können Sie bitte das Lambda erklären Teil, ich habe es, warum Sie 'Ende' geben, um NameError zu verhindern.Aber können Sie erklären, wie es funktioniert – Hackaholic

0

Platz aller numerische Eingabe in eine Liste. Wenn Sie ein Ende sehen, brechen Sie die while Schleife. Sobald Sie die while-Schleife verlassen haben, entfernen Sie das max-Element aus der Liste (z. B. lst.remove(max(list))). Schließlich erhalten Sie die Summe über sum(lst).

0

Ansatz 1: Keine temporäre Listen und Sortierung in diesem Ansatz benötigt. Mit einer temporären Liste (erhöht die Speicherkomplexität) und sortiert und Summe der Liste (erhöht die Zeitkomplexität): Ausgeschlossen ist nur eine der max Zahlen

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



Ansatz 2 (nicht mit Dubletten beschäftigen). Dies schließt nur eine max Zahlen (befasst sich nicht mit Dubletten)

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

Beide Ansätze gehen davon aus, dass Sie nur ein max Element ausschließen möchten. Wenn Sie alle max Elemente ausschließen (bei doppelter max Zahlen):

Ansatz 1: Ausgeschlossen sind auch die doppelten max Zahlen

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

Ansatz 2: Ausgeschlossen sind auch die doppelten max Zahlen