2017-02-16 4 views
1

Ich bin ein neues in Python-Programmierung und konnte das folgende Problem seit Stunden nicht lösen. Ich habe eine Beispieldatei, die vier Zeilen enthält. Ich möchte vom Benutzer zwei Eingaben erhalten, wenn er in der Dateizeile gefunden wird, aber meine Schleifen scheinen nicht über alle Zeilen zu iterieren. Dies ist der Inhalt der Datei, Elemente sind durch ein Leerzeichen getrennt:Python While-Schleife Iteration funktioniert nicht

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

und dies ist mein Code:

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() 

ich zur Eingabe zum Beispiel Google und Microsoft will und folgende Ausgabe:

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

als zwei Listen. Mein Code findet jedoch nur die erste Zeile und nicht die anderen. Können Sie mir bitte sagen, warum es nicht über andere Zeilen iteriert? Wie behebe ich das? Danke im Voraus!

+0

Was sind Ihre Werte für Erst- und Zweitsprache? – lmiguelvargasf

+2

Ihr Aufruf 'sys.exit' in Ihrer for-Schleife, so dass das Programm immer bei der ersten Iteration endet. –

+0

Werte sind zum Beispiel Google und Microsoft @lmiguelvargasf –

Antwort

0

Hier ist etwas, das nicht den Code aus Ihrem Versuch ändert sich drastisch ... Es nutzt lower() und title() für verschiedene Kapitalisierung von Benutzereingaben zu ermöglichen:

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) 

Verwendungsbeispiel:

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! 

Hier ist, wie Sie den Benutzer auffordern, für nur „zwei Begriffe“:

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...") 

Verwendungsbeispiel:

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! 
+0

Vielen Dank @ shash678. Eine weitere Sache möchte ich fragen. Ich möchte nur zwei Eingaben machen, wie in meinem Code gezeigt. Können Sie bitte zeigen, wie das geht? Ich meine, einmal prüft es auf zwei Eingaben und wenn es diese zwei gefundenen Gegenstände bekommt, druckt es diese zwei passenden Listen, wie Sie gezeigt haben, und Programmausgänge.Könnten Sie das bitte zeigen? –

+0

@python_beginner siehe meine aktualisierte Antwort – shash678

+0

Danke @ shash678. Das Letzte, was ich fragen möchte. Das ist ungefähr was ich suche, aber ist es möglich, dass ich zwei Variablen für sie zuweisen. Ich meine, wenn Google gefunden hat, weisen wir die Ausgabe ['Google', '1', '2'] zu, sagen wir out1 und weisen Microsoft output ['Microsoft', '22', '8'] out2 zu. Ich meine, ich möchte sie als zwei Listen bekommen und sie dann in anderen Teilen eines Programms für weitere Zwecke verwenden. Wie könnte es gemacht werden? Ich schätze deine große Hilfe sehr! –

0

Versuchen Sie, den folgenden Code ein. Dieser Code identifiziert, welcher Begriff gefunden wird und fragt nach dem Begriff, der nicht gefunden wurde.

Sie machen Ihre Schleife nicht richtig. Wenn Ihre Schleife zum ersten Mal ausgeführt wird, hat sie Google und term1 enthält Google und term2 enthält Microsoft. So druckt Google und danach bücken Sie die Ausführung mit sys.exit(). Also druckt es natürlich die erste Zeile, nicht die anderen.

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 
+0

Danke @Ujjaval Moradiya für Ihre Antwort. Aber könnten Sie mir sagen, wie ich zwei Variablen für diese beiden Listen zuweisen kann. Nehmen wir an, der erste wird list1 und der zweite list2. Ich möchte diese Listen für weitere Zwecke in meinem Programm verwenden. Vielen Dank für die Hilfe! –

+0

Ja, Sie können das tun. Warum denkst du nicht gleich nach? Es ist nicht so schwer. Überprüfen Sie meinen aktualisierten Code –

+0

Ja, ich habe es verstanden, die Listen definieren und dann Ergebnisse dort hinzufügen. Vielen Dank für die großartige Hilfe! –