Why doesn't my while loop stop?

I read other posts and could not understand. No matter what I enter at the end of this repeat, it always repeats the cycle. I tried while(repeat != "Quit" or repeat != "quit" or repeat != "b" or repeat != "B" or repeat != "no" or repeat != "No"): but it still not working. I do not know what else to try. What is wrong with this while loop?

  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() 
+5
source share
2 answers

Ok, let's take a look at this condition:

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

Think about it. Regardless of the value of repeat , this is always true . repeat will always be different from "Quit" OR FROM "Quit" . If this is one, it will not be another.

You need it to be different from "Quit" AND FROM "quit". Try the following:

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

Or, more compactly:

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

Replace yours or s and so:

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

It will always not be equal to at least one of these things. He cannot equal two things at once. Here is another shorter example (but try my suggestion above).

 # Never true repeat == "Quit" and repeat == "quit" # Never false repeat != "Quit" or repeat != "quit" 
0
source

Source: https://habr.com/ru/post/1233297/


All Articles