Python: несколько условий в цикле for, найдите любое значение в словаре - PullRequest
0 голосов
/ 13 июня 2018

У меня есть список словарей ниже, и вывод зависит от ввода пользователя.

table = [

    {'fruit': 'apple'},
    {'fruit': 'orange'},
    {'fruit': 'kiwi'},
    {'fruit': 'banana'}
]

try:

    user_input = input('> ')
    while query != 'exit':

У меня 2 проблемы:

  1. мой цикл while не останавливается

  2. в цикле forбыть 2 условия (1. если первое слово запроса «выбрать» и 2. если любое из других слов являются действительными ключами в таблице.

Ниже приведен код Iиметь в данный момент:

for p in table:
    key = user_input.split()
    if key[0] == "select":
        print(p['fruit'])

    exit()

Я не уверен, как искать, чтобы сравнить любое значение в словаре с вводом и как сделать несколько условий для одного и того же цикла. Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Прошу прощения, я не полностью понял ваш запрос, было бы полезно, если бы вы опубликовали какой-то псевдокод с вашим запросом, но если это так, я думаю, это может помочь вам

, если вы ждетевход, который нужно обновить, затем вам нужно сохранить значение по умолчанию для user_input и затем использовать его для завершения цикла, а не запроса, затем команду обновления user_input = input(">: ") внутри цикла, чтобы изменить его содержимое

что-токак:

user_input=''

while user_input != 'exit'::
    user_input = input(">: ")
    user_input=scan_func(user_input)
    #everything else

Примечание : также, если вы спросите меня, я бы добавил функцию, которая сканирует ввод и удаляет каждый недопустимый символ как pokayoke

для множественного оператора вы можете использовать несколько структур для сравнения всего, что вы хотите.

например:

LOOP:
    mem=(a>b,c==d,e!=f,g+n==z)
    if any(mem):
        #example of code 1 will be true if only one of the list is true
    if all(mem):
        #example of code 2 will be true if all elements are true
    if not any(mem):
        #example of code will be true if none of them is true
    if not all(mem):
        #example of code will be true if one or none of them is true

Этот примерсамый чистый из всех, и легко читаемый.но вы также можете сделать:

if (a>b) and (c==d) and (e!=f) and (g+n==z):
    #example of code
if (a>b) or (c==d) or (e!=f) or (g+n==z):
    #example of code

для памяти таблицы, есть ужасная ошибка, вы должны использовать структуру, аналогичную json, где вы используете основной класс данных в качестве доступа, а затем проверять каждый элементв его семействе

Например:

--"Fruit"
  |-'apple',
  |-'orange'
  |-'kiwi'
  |-'banana'

, тогда вы должны искать входные данные как:

any (user_input in x for x in table["Fruit"])

для части сравнения, вы должны сканировать каждую записьв таблице памяти, используя его ключ.Благодаря выражению any вы можете использовать C api для сравнения каждой записи, это быстрее, чем делать это в python следующим образом:

t=False

for i in table:
    if user_input==i:
        t=True
        break
    else:
        continue

попробуйте прочитать json и pickle в веб-документации питона,Ищите несколько статей для создания базы данных и проверяйте некоторые примеры в Интернете, это лучший вариант, чтобы улучшить ваш способ решения проблем во время программирования.

0 голосов
/ 13 июня 2018

@ Alena , вы можете попробовать приведенный ниже код.

Попробуйте онлайн на http://rextester.com/ENA11827.

table = [
    {'fruit': 'apple'},
    {'fruit': 'orange'},
    {'fruit': 'kiwi'},
    {'fruit': 'banana'}
]

fruits = set((item["fruit"] for item in table))

try:
    user_input = ""
    while user_input != 'exit':
        user_input = input('> ')
        words = user_input.split()
        if words and words[0] == "select":
            for word in words[1:]:
                if word in fruits:
                    print(word)
                    break
            else:
                print("You didn't entered any fruit name in the list")
except Exception as e:
    print(e)

"Вход (1-я итерация цикла while)

select pineapple banana

" Выход

banana

"Вход (2-я итерация цикла while)

select my car

" Выход

You didn't entered any fruit name in the list

"Вход (3-я итерация цикла while)

exit

Готово, цикл while завершается после ввода exit.

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