Проверьте, содержит ли Python список указанный элемент c - PullRequest
0 голосов
/ 10 февраля 2020

Я написал пример программы для генерации кода ха sh из ввода (это еще не сделано, поэтому вы не видите ту часть, где он фактически генерирует ха sh):

import hashlib

def isInputValid(input, validInput=[]):
    for i in validInput:
        if validInput[i] == input: # error generated here
            return True
            pass
        i = i + 1
    return False
    pass

sha1hash = hashlib.sha1()
choiceValidInputs = ["1", "2"]

print ("Welcome to hash generator!\n")
print ("[1] -- generate hash from input")
print ("[2] -- quit")
choice = input("\nWhat do you want to do? ")
if not isInputValid(choice, choiceValidInputs):
    print ("Invalid option; try again")
    choice = input("What do you want to do? ")

if choice == "1":
    print ("\n[1] SHA1/SHA256")
    print ("[2] SHA512")
    hashType = input("\nWhat hash type do you want? ")
    ...
elif choice == "2":
    print ("Goodbye!")
    quit()

Окно моего терминала:

kali@kali:~$ python3 /home/bin/hashgenerator.py 
Welcome to hash generator!

[1] -- generate hash from input
[2] -- quit

What do you want to do? 1
Traceback (most recent call last):
  File "/home/bin/hashgenerator.py", line 19, in <module>
    if isInputValid(choice, choiceInput)==False:
  File "/home/bin/hashgenerator.py", line 5, in isInputValid
    if validInput[i] == input:
TypeError: list indices must be integers or slices, not str
kali@kali:~$ 

Я хочу проверить, присутствует ли вход в choiceValidInputs. Я действительно не знаю, как работать со списками и т. Д. c. в Python.

Спасибо за помощь

Ответы [ 2 ]

3 голосов
/ 10 февраля 2020

Вы просматриваете элементы, а не индексы

Если вы хотите использовать индексы:

def isInputValid(input, validInput=[]):
    for i in range(len(validInput)):
        if validInput[i] == input: # error generated here
            return True

Если вы хотите использовать элементы, вы можете сделать

def isInputValid(input, validInput=[]):
    for i in validInput:
        if i == input: # error generated here
            return True

Но вы можете сделать это проще. И правильнее:)

def isInputValid(input, validInput=[]):
    return input in validInput
1 голос
/ 10 февраля 2020
for i in validInput:
    if validInput[i] == input:

i здесь не индекс предмета в validInput, это сам предмет. То, что вы хотите сделать, это:

for i in validInput:
    if i == input:

Кроме того, вам не нужно pass и i = i+1 ниже. И я бы предложил переименовать переменную input во что-то другое, чтобы избежать путаницы с функцией input().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...