2016-10-31 3 views
1

Я хочу проверить, находится ли строка, заданная с помощью параметров в функции, в списке. Сам код не вызывает ошибок, но работает неправильно. Если я передам свою функцию «-a» в качестве параметра, она все еще говорит, что ее нет в списке, но это определенно.Проверьте, есть ли элемент в списке

Это код:

def generatePassword(pLength, mode): 
    password = str() 
    commands = ["-a", "-n", "-s", "-allupper", "-mixupper"] 
    alphabet = ["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"] 
    specialCharacters = ["!", "?", "&", "@", 
         "-", "=", "#", "+", "*", "/", "%", "§"] 
    if mode.lower().split() not in commands: 
     print("Couldn't recognize commands...") 
    else: 
     for n in range(pLength): 
      i = random.randint(1, 2) 
      if "-a" in mode.lower().split(): 
       password += alphabet[random.randint(0, 25)] 
     print("[+]", password) 

generatePassword(30, "-a") 
+1

Ваш первый 'if' линия спрашивает, если список находится в другой list, это никогда не будет верно для не-вложенных списков, даже если списки идентичны. –

+0

Когда вы «разделяете» строку, результатом будет список. Поскольку списка нет в 'command', он возвращает' False'. Поставьте 'split()', чтобы исправить это. – thefourtheye

+0

@thefourtheye Простое удаление «пролитой()' не является решением. Там может быть больше, чем команда. – Psytho

ответ

0

Вы можете использовать команду any, чтобы проверить, все ли слова в mode.lower().split() не в команды:

def generatePassword(pLength, mode): 
    password = str() 
    commands = ["-a", "-n", "-s", "-allupper", "-mixupper"] 
    alphabet = ["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"] 
    specialCharacters = ["!", "?", "&", "@", 
         "-", "=", "#", "+", "*", "/", "%", "§"] 

    if any(x not in commands for x in mode.lower().split()): 
     print("Couldn't recognize commands...") 
    else: 
     for n in range(pLength): 
      i = random.randint(1, 2) 
      if "-a" in mode.lower().split(): 
       password += alphabet[random.randint(0, 25)] 
     print("[+]", password) 

generatePassword(30, "-a") 
+0

Таким образом, он не позволит мне использовать в параметре несколько команд. Вот почему я разделил его:/ – hudumudu

+0

@hudumudu Проверьте ответ прямо сейчас! Вы можете использовать команду 'any', чтобы увидеть, не указано ли какое-либо из слов в' mode.lower(). Split() 'не в командах. – gowrath

+0

Это сработало, спасибо! Могу ли я принять более одного ответа как правильно в Stackoverflow? – hudumudu

2

Ваше состояние не хорошо:

if mode.lower().split() not in commands: 
    print("Couldn't recognize commands...") 

Заменить его (например):

args = set(mode.lower().split()) 
if not set(args).issubset(set(commands)): 
    print("Couldn't recognize commands...") 

http://python.6.x6.nabble.com/Test-if-list-contains-another-list-td1506964.html

+0

Это сработало для меня спасибо! Я еще не узнал о наборах, поэтому я не знал, когда и как их реализовать, но я скоро посмотрю на них. – hudumudu

Смежные вопросы