2016-10-10 1 views
2

Ich bin ein echter Anfänger mit Python, obwohl ich jede Minute davon bis jetzt liebe.Ablehnen oder Schleife über Benutzereingabe, wenn zwei Bedingungen nicht erfüllt

Ich mache ein kleines Programm, das Benutzereingaben nimmt und dann Sachen damit macht. Mein Problem ist, dass die Zahlen die Benutzereingaben müssen

(1) Alle summieren sich zu nicht mehr als eine (dh a1 + a2 + a3 \ leq 1)

(2) Jede einzeln < 1.

so weit

Hier ist mein Code (nur die wesentliche Mitte Bit):

num_array = list() 


    a1 = raw_input('Enter percentage a (in decimal form): ') 
    a2 = raw_input('Enter percentage b (in decimal form): ') 
    ... 
    an = raw_input('Enter percentage n (in decimal form): ') 


li = [a1, a2, ... , an] 

for s in li: 
    num_array.append(float(s)) 

Und ich würde gerne in etwas zu bauen, um es dem Benutzer Wiedereingänge Dinge zu verlangen, wenn ihre Eingaben entweder die Forderung übersteigen,

a1 + a2 + a3> 1

oder dass a1> 1, a2> 1, a3> 1 usw.

Ich habe das Gefühl, das wirklich einfach sein würde, zu implementieren, aber mit meinem begrenzten Wissen Ich stecke fest!

geschätzt Jede Hilfe wäre viel :-)

+0

Ich sehe, dass Sie eine n ersten, die die Anzahl der Prozentsätze der Benutzereingabe wird, ist lesen müssen. Danach sollten Sie das Lesen eines Prozentsatzes n Mal wiederholen (verwenden Sie eine for-Anweisung, um dies zu erreichen). Jetzt können Sie eine Bestätigung hinzufügen, dass jeder Prozentwert beim Lesen oder am Ende niedriger als 1 ist. Auch am Ende würden Sie alle Werte hinzufügen und bestätigen, dass ihre Summe nicht größer als 1 ist. Setzen Sie eine Wiederholung für den gesamten Code und beenden Sie nur, wenn Sie möchten. Wenn also eine Validierung fehlschlägt, beginnen Sie erneut. – gplayer

+0

Sie können unter https://wiki.python.org/moin/WhileLoop – Zety

+0

Danke, @gplayer und @WalR starten! Das sind wirklich hilfreiche Vorschläge, und danke dafür, dass ich über die Antwort nachgedacht habe und mir nicht nur eins gegeben habe :-) –

Antwort

4
input_list = [] 
input_number = 1 
while True: 

    input_list.append(raw_input('Enter percentage {} (in decimal form):'.format(input_number)) 

    if float(input_list[-1]) > 1:  # Last input is larger than one, remove last input and print reason 
     input_list.remove(input_list[-1]) 
     print('The input is larger than one.') 
     continue 

    total = sum([float(s) for s in input_list]) 
    if total > 1: # Total larger than one, remove last input and print reason 
     input_list.remove(input_list[-1]) 
     print('The sum of the percentages is larger than one.') 
     continue 

    if total == 1: # if the sum equals one: exit the loop 
     break 

    input_number += 1 
+0

Oh, mein! Das tut genau das, was ich wollte und leicht zu verstehen ist. Danke für eine tolle Antwort :-) –

+0

was Sie auch tun könnten, um es zu verbessern, ist es, einen gewissen "Fehler" Rand (wie 10^-3) zu setzen, um Gleitkommafehler zu fangen. Dann wäre es 'if (1-Fehler)

+0

Das ist wirklich schick! Vielen Dank! –

Verwandte Themen