Python, пока итерация цикла не работает

Я новичок в программировании на Python и не могу решить следующую проблему в течение нескольких часов. У меня есть образец файла, который содержит четыре строки. Я хочу получить два ввода от пользователя к тому времени, когда он будет найден в строке файла, однако мои циклы, кажется, не повторяются по всем строкам. Это содержимое файла, элементы разделяются пробелом:

Google 1 2  
Apple 13 17  
Microsoft 22 8  
Verizon 6 15

И это мой код:

import sys
with open('manylines.txt','r') as myfile:
    results = [line.split() for line in myfile]

    for i in results:
        print(i)


        term1=input("Enter the first term:")
        while  term1 not in i :
            print("Term not found,please try again:")
            term1 = input("Enter the first term:")

        term2 = input("Enter the second term:")
        while term2 not in (i) :
            print("Term not found,please try again:")
            term2 = input("Enter the second term:")
        print(i)
        print(i)
        sys.exit()

Я хочу ввести, например, Google и Microsoft и получить следующий вывод:

['Google','1','2']  
['Microsoft','22','8']

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

2 ответа

Решение

Вот то, что не меняет код от вашей попытки радикально... Он использует lower() а также title() чтобы учесть различную капитализацию пользовательского ввода:

import sys

with open('data.txt','r') as f:
    results = [line.split() for line in f]

while True:
    found = False
    term = input("Enter a company to search or type exit: ")
    if term.lower() == "exit":
        break
    for record in results:
        if record[0] == term.title():
            print(record)
            found = True
            break
    if not found:
        print("Term not found, please try again...")

print("Goodbye!")
sys.exit(0)

Пример использования:

Enter a company to search or type exit: Google
['Google', '1', '2']
Enter a company to search or type exit: microsoft
['Microsoft', '22', '8']
Enter a company to search or type exit: Amazon
Term not found, please try again...
Enter a company to search or type exit: Exit
Goodbye!

Вот как вы можете запросить у пользователя только "два термина":

out1, out2 = [], []
term_count = 1
while term_count < 3:
    found = False
    term = input("Enter term %d or type exit: " % term_count)
    if term.lower() == "exit":
        break
    for record in results:
        if term_count == 1 and record[0] == term.title():
            print(record)
            out1 = list(record)
            found = True
            term_count += 1
            break
        if term_count == 2 and record[0] == term.title():
            print(record)
            out2 = list(record)
            found = True
            term_count += 1
            break
    if not found:
        print("Term not found, please try again...")

Пример использования:

Enter term 1 or type exit: Amazon
Term not found, please try again...
Enter term 1 or type exit: Google
['Google', '1', '2']
Enter term 2 or type exit: Microsoft
['Microsoft', '22', '8']
Goodbye!

Попробуйте следующий код. Этот код определяет, какой термин найден, и запрашивает термин, который не найден.

Вы не делаете свой цикл правильно. Когда ваш цикл выполняется в первый раз, он использует Google, а term1 содержит Google, а term2 содержит Microsoft. Таким образом, он печатает Google, и после этого вы останавливаете выполнение с помощью sys.exit (). Так что, конечно, печатается первая строка, а не остальные.

import sys
with open('tempa.txt','r') as myfile:
    results = [line.split() for line in myfile]

NeedToExecute = 0
term1 = False
term2 = False

list1 = None
list2 = None

while NeedToExecute != 2:

    if(term1 != True):
        term1 = input("Enter the first term:")

    if(term2 != True):
        term2 = input("Enter the second term:")

    for i in results:

        if term1 in i :
            NeedToExecute = NeedToExecute + 1
            term1 = True
            list1 = i
            print(i)

        if term2 in i :
            NeedToExecute = NeedToExecute + 1
            term2 = True
            list2 = i
            print(i)

print list1
print list2
Другие вопросы по тегам