2017-12-08 2 views
0

Ich habe hier nach einer Idee gesucht, um die ungültige Eingabe des Benutzers zu wiederholen, und ich habe keine gefunden.validieren Benutzereingaben und Schleife bis richtig

Ok, ich weiß, wie man die first_number und second_number zusammenschleifen kann, aber ich bin ein wenig verwirrt, wie man das bei Bedarf getrennt durchschleifen kann. Also wenn der Benutzer eine schlechte second_number eingibt und diese statt der ganzen Sache wieder schleift.

ich das Teil mit Ich brauche Hilfe angebracht haben (ja, das ist eine Schulaufgabe):

def get_numbers(): 
first_number = 0.0 
second_number = 0.0 

while True: 
    try: 
     first_number = float(input("Please enter the first number: ")) 
     second_number = float(input("Please enter the second number: ")) 
    except ValueError: 
     print("Not a valid input, please try again.") 
     continue 

    return first_number, second_number 

Antwort

1

Um 1-Schleife verwenden, können Sie die Unterschiede erkennen müssen:

  1. Sie verwenden zwei einfache Variablen für die Ergebnisse, obwohl Sie 1 list nutzen könnten.
  2. Die Eingabezeichenfolge ist fast identisch mit Ausnahme der Wörter "first" und "second".

Konzept:

  1. Zuerst wollen Sie eine list.
  2. Verwenden Sie dann eine for Schleife, um "zuerst", dann "zweite" Wörter zu verwenden.
  3. Verwenden Sie dann eine while Schleife, die die Eingaben verarbeitet und die list verwendet, um mit den Antworten zu erweitern. Verwenden Sie break, um aus der while Schleife nach jeder guten Antwort zu gelangen.

def get_numbers(): 
    result = [] 

    for item in ("first", "second"): 
     while True: 
      try: 
       number = float(input("Please enter the " + item + " number: ")) 
      except ValueError: 
       print("Not a valid input, please try again.") 
      else: 
       result += [number] 
       break 

    return tuple(result) 

als Tupel zurückkehrend, wie Sie getan haben.

+0

Sorry für so eine späte Antwort. Ich verstehe, was du hier machst und es hat den Code kaputt gemacht, also ist es kürzer (immer nett). Die Sache, die ich ein bisschen mehr lernen muss, ist Tupel. Ansonsten, danke für Ihre Antwort und brechen Sie es in einfacheren Worten. – Eman

0

Zuerst wollen Sie zwei Schleifen verwenden, eine für jede Zahl, und zu brechen, wenn der Eingang gültig statt fortfahren, wenn es ungültig ist. Dann müssen Sie die return-Anweisung unmittelbar nach der zweiten Schleife verschieben.

Übrigens, Sie können die ursprünglichen Zuweisungen zu first_number und second_number (kommentiert unten) weglassen. Zuweisen sie zu float(input(...)) ist genug.

def get_numbers(): 
    #first_number = 0.0 
    #second_number = 0.0 

    while True: 
     try: 
      first_number = float(input("Please enter the first number: ")) 
      break 
     except ValueError: 
      print("Not a valid input, please try again.") 

    while True: 
     try: 
      second_number = float(input("Please enter the second number: ")) 
      break 
     except ValueError: 
      print("Not a valid input, please try again.") 

    return first_number, second_number 
+0

Vielen Dank für Ihre Antwort und ich entschuldige mich für meinen späten. Nun wollte ich diesen Weg gehen, aber ich wusste nicht, wo ich anfangen sollte. Ich dachte, ich würde 2 While Loops einfügen, die Verwirrung erzeugen würden, also habe ich es nicht einmal versucht. Außerdem verstehe ich, was Sie meinten, indem Sie die ersten 2 Aufgaben weglassen. Danke für Ihre Rückmeldung. – Eman

Verwandte Themen