3

I'm not exactly sure why but when I execute this section of code nothing happens.

while (True) :

    choice = str(input("Do you want to draw a spirograph? (Y/N) "))

    if choice == 'n' or 'N' :
        break

    elif choice == 'y' or 'Y' :    

       <CODE>

    else :
        print("Please enter a valid command.")
        choice = input("Do you want to draw a spirograph? (Y/N)")           
Anshul Goyal
  • 73,278
  • 37
  • 149
  • 186
Cal_9000
  • 57
  • 4
  • 2
    Edit your code section and add `while` line to it. I don't do this myself cause your problem may rely on it. – Mehraban Oct 07 '14 at 04:52
  • So many SO questions would be avoided in Python self-linted this case.. – user2864740 Oct 07 '14 at 04:59
  • FWIW, you don't need parenthesis around your predicate. `while True:` is better. – rahmu Oct 07 '14 at 05:00
  • 1
    possible duplicate of [How do I test one variable against multiple values?](http://stackoverflow.com/questions/15112125/how-do-i-test-one-variable-against-multiple-values) – user2864740 Oct 07 '14 at 05:02
  • (And see the many linked answers on the duplicate such as http://stackoverflow.com/questions/20002503/why-does-name-kevin-or-jon-or-inbar-always-evaluate-to-true?lq=1) – user2864740 Oct 07 '14 at 05:03

2 Answers2

12

It won't work because the 'N' literal always evaluates to True within your if statement.

Your if condition currently stands as if choice == 'n' or 'N' :, which is equivalent to if (choice == 'n') or ('N'), which will always evaluate to True irrespective of the value of variable choice, since the literal 'N' always evaluates to True.

Instead, use one of the following

  • if choice == 'n' or choice == 'N' :
  • if choice in 'nN' :
  • if choice in ('n', 'N') :

The same holds for your elif block as well. You can read more about Truth Value testing here.

Anshul Goyal
  • 73,278
  • 37
  • 149
  • 186
5

This expression doesn't do what you want:

choice == 'n' or 'N'

It is interpretted as this:

(choice == 'n') or 'N'

You might want to try this instead:

choice in 'nN'
Nick Russo
  • 1,522
  • 10
  • 13