2015-10-08 9 views
5

Ich habe andere Beiträge gelesen und konnte es nicht herausfinden. Egal, was ich am Ende dieser Wiederholung eingeben werde, es wiederholt immer die Schleife. Ich habe versucht while(repeat != "Quit" or repeat != "quit" or repeat != "b" or repeat != "B" or repeat != "no" or repeat != "No"):, aber es hat noch nie funktioniert. Ich weiß nicht, was ich noch versuchen soll. Was ist falsch mit dieser While-Schleife?Warum stoppt meine While-Schleife nicht?

repeat = "d" 
    print "Please answer questions using the choices (A, B, C, etc.)" 
    time.sleep(2.1738) 
    while repeat != "Quit" or repeat != "quit" or repeat != "b" or repeat != "B" or repeat != "no" or repeat != "No": 
     print "A) Round Edges" 
     print "B) Straight Edges" 
     Edges1 = raw_input("Does the shape have round edges or straight edges?: ") 
     if Edges1 == "a" or Edges1 == "A" or Edges1 == "Round Edges" or Edges1 == "round edges": 
      print "A) Circle" 
      print "B) Semi-Circle" 
      Circle = raw_input("Is it a circle or semi-circle?: ") 
      if Circle == "A" or Circle == "a" or Circle == "Circle" or Circle == "circle": 
       radius_C = input("What is the radius (1/2 of the Diameter)?: ") 
       Area_C = math.pi * radius_C ** 2.0 
       Circum_C = 2.0 * math.pi * radius_C 
       Diameter_C = 2.0 * radius_C 
       print "The radius is " + str(radius_C) + ". " 
       time.sleep(.5) 
       print "The diameter is " + str(Diameter_C) + ". " 
       time.sleep(.5) 
       print "The circumference is " + str(round(Circum_C, 2)) + ". " 
       time.sleep(.5) 
       print "The area is " + str(round(Area_C, 2)) + ". " 
       time.sleep(5) 
      elif Circle == "B" or Circle == "b" or Circle == "Semi-Circle" or Circle == "semi-circle": 
       radius_S = input("What is the radius (1/2 of the Diameter)?: ") 
       Area_S = math.pi * radius_S ** 2.0 * .5 
       Diameter_S = 2 * radius_S 
       Per_S = ((math.pi * 2 * radius_S)/2) + Diameter_S 
       print "The radius is " + str(radius_S) + ". " 
       time.sleep(.5) 
       print "The diameter is " + str(Diameter_S) + ". " 
       time.sleep(.5) 
       print "The perimeter is " + str(round(Per_S, 2)) + ". " 
       time.sleep(.5) 
       print "The area is " + str(round(Area_S, 2)) + ". " 
       time.sleep(5) 
      else: 
       print "Incorrect input." 
     elif Edges1 == "b" or Edges1 == "B" or Edges1 == "Straight Edges" or Edges1== "straight edges": 
      sides = input("How many sides does the shape have?: ") 
      sideL = input("What is the length of 1 side?: ") 
      Area = round(Area_R(sides, sideL), 4) 
      Perim = round(Perm_R(sides, sideL), 4) 
      print "The area of this figure is: " + str(Area) 
      print "The perimeter of the figure is: " + str(Perim) 
     else: 
      print "Incorrect input." 


     time.sleep(4) 
     print" " 
     print" " 
     print "A) yes" 
     print "B) No" 
     repeat = raw_input("Want to try another?: ") 
     time.sleep(1) 
main() 
+3

Ich glaube, Sie bedeutete 'und' statt' or' ... – ThiefMaster

Antwort

7

Nun, lassen Sie uns in diesem Zustand einen Blick:

while repeat != "Quit" or repeat != "quit" 

darüber nachdenkt. Egal was der Wert von repeat ist, ist dies immer wahr. repeat wird immer anders sein als "Quit"ODER VON"quit". Wenn es der eine ist, wird es nicht der andere sein.

Sie müssen sich von "Quit" unterscheiden UND VON "quit". Versuchen Sie folgendes:

while repeat != "Quit" and repeat != "quit" ... 

Oder die kompaktere:

while repeat.lower() not in ["quit", "b"] 
+0

Wow eine solche einfache Lösung:/ –

+2

Vielleicht entdeckte ich Es ist einfacher, weil ich nicht den ganzen Code in der Schleife gelesen habe - ich nahm an, dass das Problem in der ersten oder letzten Zeile sein würde. Das nächste Mal, wenn Sie kein Problem finden, finden Sie das kleinste mögliche Stück Code, der das Problem hat, und angreifen das :) – slezica

+0

Gut danke für die Hilfe :) –

0

Ersetzen Sie Ihre oder die mit und ist so:

while repeat != "Quit" and repeat != "quit" and repeat != "b" and repeat != "B" and repeat != "no" and repeat != "No": 

Es ist immer mindestens eines dieser Dinge gehen nicht gleich. Es kann nicht gleich zwei Dinge gleichzeitig sein. Hier ist ein anderes kürzeres Beispiel (aber versuche meinen Vorschlag oben).

# Never true 
repeat == "Quit" and repeat == "quit" 

# Never false 
repeat != "Quit" or repeat != "quit"