Skip to content Skip to sidebar Skip to footer

Else-statement After While-statement, And String Comparison With A List Of Strings?

I'm attempting to create a small test script that appends something to a note. Contained below is the main function that I will execute in the script. The problem seems to be that

Solution 1:

Your culprit is the while loop condition:

while q02 == 'No' or 'no' or 'NO' or 'n':

This is equivalent to:

while (q02 == 'No') or 'no' or 'NO' or 'n':

As 'no', 'NO' and 'n' are all non-empty strings they evaluate to True and so your condition evaluates to:

while (q02 == 'No') orTrueorTrueorTrue:

which is clearly always True.

To fix this you need to adjust the condition to:

whileq02== 'No'orq02== 'no'orq02== 'NO'orq02== 'n':

Although to be more pythonic you could instead make this:

while q02 in ['No','no','NO','n']:

Solution 2:

The problem is that the guard condition on the while block is always True!

>>>q02 = 'y'>>>q02 == 'No'or'no'
'no'

The or operator is interesting. It evaluates it's left operand and if it is "truthy" then the left operand is the result of the operation; otherwise, it evaluates it's right operand. In your case, the left operand is a boolean value (the result of q02 == 'No') and the right operand is a non-empty string. The non-empty string is "truthy" so that is the result.

IOW, q02 == 'No' or 'no' or 'NO' or 'n' evaluates to True if and only if q02 is 'No'. Otherwise it evaluates to the string 'no' which is "truthy" as far as the while loop is concerned.

>>>q02 = 'y'>>>q02 == 'No'or'no'or'NO'or'n'
'no'
>>>bool(q02 == 'No'or'no'or'NO'or'n')
True

Solution 3:

Change this statement

while q02 == 'No' or 'no' or 'NO' or 'n': 

to

whileq02== 'No'orq02== 'no'orq02== 'NO'orq02== 'n':

One more elegant way of doing it:

defstartMe():
    q01 = input("What is the subject of your note?\n")
    q02 = input("Are you certain that the subject of your note is " + q01 + "?\n")
    negList = ['No', 'no', 'NO', 'nO', 'n', 'N']  # <<< Easily modifiable list.whileany(q02 in s for s in negList):  
       q01 = input("So, what is the subject of your note?\n")
       q02 = input("Are you certain that the subject of your note is " + q01 + "?\n")
    break:
       q03 = input("Enter the content of your note")

Solution 4:

Your logic and code is correct except 1 syntax. Use while q02 == 'No' or q02 == 'no' or q02 == 'NO' or q02 == 'n': insted of while q02 == 'No' or 'no' or 'NO' or 'n':

You can try:

defstart():
    q01 = input("What is the subject of your note?\n")
    q02 = input("Are you certain that the subject of your note is " + q01 + "?\n")
    while q02 == 'No'or q02 == 'no'or q02 == 'NO'or q02 == 'n':
       q01 = input("So, what is the subject of your note?\n")
       q02 = input("Are you certain now that the subject of your note is " + q01 + "?\n")
    else:
       q03 = input("Enter the content of your note")
start() 

Post a Comment for "Else-statement After While-statement, And String Comparison With A List Of Strings?"