2017-10-01 12 views
1

私はユーザ名システムを必要とするプログラムを持っています。ユーザー名を入力して、プログラムが 'username'ファイルをチェックしてリストに入っているかどうかを確認します。私のコードは、リストに人が1人しかいなければ動作しますが、それ以外の人は正しいと正しくありません。どのように私のコードを変更するので、1行だけ入力したものと一致すれば、それは正しく出力されます。入力に一致するテキストファイルを確認する

username = input("enter username: ") 
search = open("username", "r") 
for line in search: 
    if username in line: 
     print ("correct") 
    else: 
     print ("incorrect") 
+0

これはセキュリティの低いアプリケーションであり、ユーザーはプレーンテキストとしてユーザー名を保存しても構いません。 ;) –

+0

はいそれは唯一のクイズです – user8469209

答えて

1

pythonにあるfor...else構成を悪用する可能性があります。ループから出て壊すことなく - プログラムが自然に終了した場合

with open("username") as f: 
    for line in f: 
     if username in line: 
      print("correct") 
      break 
    else: 
     print("incorrect") 

elseブロックが実行されます。

0

あなたは伝統的なforループを好きではない場合、私はあなたにこのソリューションを提案する:これを実現する

with open("username") as f: 
    isInList = [username in line for line in f]: 
    if any(isInList): 
     print ("correct") 
    else: 
     print("incorrect") 
0

一つの方法は、それが一致するものを見つけた後、単純に返すことです。リターンを使用してロジックを関数にカプセル化すると、結果で他のことを行うことができます。また、ファイルのオープンにはwithステートメントを使用することをお勧めします。これはエラー処理が改善され、自動的にファイルとクリーンアップを処理するためです。 Hereは、withステートメントの短いチュートリアルです。

username = input("enter username: ") 
def read_file(): 
    with open("username", "r") as f: 
     for line in f: 
      if username in line: 
       return "correct" 
     else: 
      return "incorrect" 
result = read_file() 
print(result) 
# Or do whatever else you want with the result 
関連する問題