0

It will not allow me to load my function, I am unsure as it will let me link the No answer just not the yes one.

def randompass(password):
    number = ["0","1","2","3","4","5","6","7","8","9"]
    alpha = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    beta = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L" ,"M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",] 
    special = ["?","!","#","@"]

    password = ""
    for i in range (0,1):
        password += random.choice(beta)
    for i in range(0,6):
        password += random.choice(alpha)
    for i in range(0,3):
        password += random.choice(number)
    for i in range(0,1):
        password += random.choice(special)


def password(answer):
    answer = input("please enter a password:")
    numbercheck(answer)



R = True
while R == True:
    user = input("do you want to select your password? please type yes or no, if you do not want to select your password we will randomise one for you.")
    if user == ("y" or "ye" or "yes" or "YES" or "YE" or "Yes" or "YEs"):
        password(user)
        R = False
    elif user == ("no" or "NO" or "na" or "n"or"No"or"nO"):
        randompass(user)
        R = False
    else:
        print ("Sorry i do not recognise this")
        continue

This is my code, The randompass is a bit further up but this works perfectly it is just the yes answer and it keeps looping to sorry i do not recognise this when the no one does not

Libra
  • 2,544
  • 1
  • 8
  • 24

1 Answers1

-1

As mentioned in the comments, you are not using conditions correctly. Here is an example of corrected code:

R = True
while R == True:
    user = input("do you want to select your password? please type yes or no, if you do not want to select your password we will randomise one for you.")
    if user in ("y", "ye", "yes", "YES", "YE", "Yes", "YEs"):
        password(user)
        R = False
    elif user in ("no", "NO", "na", "n", "No", "nO"):
        randompass(user)
        R = False
    else:
        print ("Sorry i do not recognise this")
        continue

To explain why, let's start with ("y" or "ye" or "yes" or "YES" or "YE" or "Yes" or "YEs"), since it's in parenthesis and will be evaluated first

In python, a or b returns a if a is True, else returns b. Since a non-empty string returns True, this returns "y".

Then, the statement becomes user == "y", which might be true, but if you type any of the other options (such as "yes"), this statement will be false. It won't act like you expect.

Since you start your no condition with a plain-old "no", this is likely why you think it's working

Libra
  • 2,544
  • 1
  • 8
  • 24
  • Thank you very much! That worked! Thank you for explaining this, I am still quite new to this I have not done any coding in a very long while and am still very inexperienced but thanks for your help. – DannyMoham1 Jan 11 '23 at 19:20
  • This answer is a duplicate of [this](https://stackoverflow.com/a/15112149/17769815) answer on the dupe target, but uses tuples instead of sets (which is slower). – BrokenBenchmark Jan 11 '23 at 20:23
  • @BrokenBenchmark I didn't think trying to optimize OPs code would be a good way to help them understand what's going on. There are obviously many, many better ways to write all of this. – Libra Jan 11 '23 at 21:40
  • My point is that you should answer on the dupe target, _not_ here. Even still, I argue that your answer is similar to those on the dupe target, and what differences exist make your answer strictly worse than those already there. – BrokenBenchmark Jan 11 '23 at 22:07