Python - Оператор If: Elif или Else не работают для кода генерации пароля - PullRequest
0 голосов
/ 14 июля 2020

Я безуспешно пытаюсь запустить этот код. Предполагается, что это базовый c генератор паролей, который позволит вам выбирать между генерацией 20-значного и 8-значного.

Вот код:

import random
def genpass():
    print('this is a password generator biiaatch!')

full_char_table = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~"
alpha_char_table = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"


scelta = input('choose a password: S = simple one/8 characters; D = difficult one/20 characters: ') 
x = 0
if scelta == "s" or "S":
    lenght = 8
    _type = alpha_char_table
    password = ""
        
    for x in range(int(lenght)):
        password = password + _type[int(random.randrange(len(_type)))]
        
        x += 1
    print('the password is: ' + password)    
elif scelta == "D" or "d":
    lenght2 = 20
    _type2 = full_char_table
    password2 = ""
        
    for x in range(int(lenght2)):
        password2 = password2 + _type2[int(random.randrange(len(_type2)))]
        
        x += 1
    print('the password is: ' + password2) 

Он генерирует только 8-символьный, даже если I di git D или d или что-то еще. Кто-нибудь знает, почему он так себя ведет?

Ответы [ 3 ]

1 голос
/ 14 июля 2020

Как указывали другие люди, вы неправильно используете оператор «логическое или» и предложили вам решение. Однако использование «или» не обязательно, так как вы можете просто использовать метод «lower» (или «upper»), поскольку в этом случае он просто преобразует строку в нижний регистр строк. Это будет выглядеть так:

if scelta.lower() == 's':
    #...
elif scelta.lower() == 'd':
    #...
else: # also include an else, in case input doesn't match any defined cases
    #...
0 голосов
/ 14 июля 2020

У вас должны быть следующие строки, чтобы заменить ваш оператор if / elif:

if scelta == "s" or scelta == "S":

и

elif scelta == "D" or scelta == "d":

Вы неправильно использовали оператор 'или', помните что каждая часть оператора if является отдельной, и вы не можете просто снова использовать переменную без ее определения. :)

Удачи!

0 голосов
/ 14 июля 2020

Вы неправильно используете оператор or. or - логический оператор, который возвращает True, если хотя бы один из операндов истинен. В вашем случае операнд "S" оператора or равен true, поэтому всегда выбирается первая ветвь if. (То же самое относится к "d" операнду elif, но ветвь никогда не выбирается по вышеуказанной причине.)

Чтобы искать как прописные , так и строчные буквы, ( el), если команды должны выглядеть так:

if scelta == "s" or scelta == "S":
# ...
elif scelta == "D" or scelta == "d":
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...