Проверьте длину списка и добавьте ввод при необходимости - PullRequest
0 голосов
/ 18 июня 2019

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

Я попытался использовать оператор while для len (list) <8 и оператор if / else для того же.Оба запрашивают дополнительный ввод, но ни один не печатает список в конце.Я попробовал вложенный цикл с while len (list) <8, и внутри был цикл if / else, но он возвращал те же ошибки, что и исходный оператор while. </p>

>>>def main():
...     userinput= input("Enter a list of at least eight words separated by a comma: ")
...     list= userinput.split(",")
...     while len(list)<7:
...             print("Please enter more words")
...             more_input= input()
...             more_input.split(",")
...             list.append(more_input)
...     print(list)

OR

>>> def main():
...     userinput= input("Enter a list of at least eight words separated by a comma: ")
...     list= userinput.split(",")
...     if len(list)<7:
...             print("Please enter more words")
...             more_input= input()
...             more_input.split(",")
...             list.append(more_input)
...     else:
...             print(list)

Ошибки с циклом while: Он просто продолжает запрашивать дополнительный ввод, даже если в списке есть минимально требуемый ввод

>>> main()
Enter a list of at least eight words separated by a comma: This, is, a, list
Please enter more words
More, words
Please enter more words
Three, more, words
Please enter more words

Ошибки с циклом if / else: Проверяется только один раз.Если длина хорошая, распечатывается список.Если длина не хорошая, он запрашивает больше ввода и затем останавливается.Он не проверяет длину снова и не печатает список.

Ответы [ 3 ]

0 голосов
/ 18 июня 2019

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

def main():
     userinput= input("Enter a list of at least eight words separated by a comma: ")
     input_list = userinput.split(",")
     while len(input_list)<7:
             print("Please enter more words")
             more_input= input()
             splitted_more_input = more_input.split(",") # problem fixed here
             for i in splitted_more_input: # split creates another list 
                 input_list.append(i) # add inputs individual
    print(input_list)
0 голосов
/ 18 июня 2019

Поскольку вам нужно многократно выполнять функцию до тех пор, пока не будет выполнено определенное условие, вы можете воспользоваться помощью рекурсивных функций следующим образом

def main():
    userinput= input("Enter a list of at least eight words separated by a comma: ")
    words = userinput.split(",")

    if len(words) == 8:
        print (words)        
    else:
        A = reenter_words(words)
        print (A) 

def reenter_words(words):
    if len(words) == 8:
        return words
    else:
        IN = input("More words are needed:")
        new_words = words + IN.split(",")
        return reenter_words(new_words)

Здесь я рекурсивно вызываю функцию reenter_words, пока мы не получим восемь словот пользователя.

ВЫБОР ОБРАЗЦА

Enter a list of at least eight words separated by a comma: qq,ww,ee,rr,tt
More words are needed:gg,hh
More words are needed:kk
['qq', 'ww', 'ee', 'rr', 'tt', 'gg', 'hh', 'kk']

Надеюсь, это поможет!

0 голосов
/ 18 июня 2019

Попробуйте, если хотите объединить разделенные подсписки в основном списке:

def main():
    list_= []
    print("Enter a list of at least eight words separated by a comma: ")
    while len(list_)<7:
        print("Please enter more words")
        userinput = input()
        temp = userinput.split(",")
        list_ += temp
    print(list_)
main()

Выход :

Enter a list of at least eight words separated by a comma: 
Please enter more words
This, is, a, list
Please enter more words
more, words
Please enter more words
three, more, words
['This', ' is', ' a', ' list', 'more', ' words', 'three', ' more', ' words']

Примечание: избегайте присвоения имени переменной как list, поскольку это встроенное ключевое слово в python.

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