2016-12-16 10 views
0

メモ:一部のクラスメートは、私はuserInputに基づいて別のリストを作成するためにuserInputを取らなければならないと教えてくれました。 (例: "g"を入力、 "g"で始まる国のリストを作成します)ユーザー入力の文字で始まるリストから行を読み込む?

これは私の現在のコードです。

countries = [] 
population = [] 
str = [] 
path = "E:\\SCRIPTING\\Countries.txt" 
obj = open(path, "r") 
allList = obj.readlines() 
obj.close() 
userI = input("Please input a single letter: ") 
if userI.isalpha(): 
    if len(userI) > 1: 
     print("Please enter only a single letter.") 
    else: 
     print("continue") 
elif userI.isdigit(): 
    int(userI) 
    print("Please enter a single letter, not a number.") 
else: 
    print("Please make sure that you enter a single letter.") 

は、これまでのところ私が持っているものから、私はそれが私の.txtファイルを読み込み、そして間違った入力が与えられているときに別のエラー/メッセージを表示だということを知っています。 他の下に置くことにする(プログラム:印刷​​( "継続)その私のチェックポイント以来

プログラムは、その文字で始まるすべての行のみ1文字と印刷を受け入れるように作られて

+0

次のようなものがあります。 'for all inList:doSomeCheck'? – Fejs

答えて

1

あなたが返すことができます。ちょうどあなたの前に簡単なテストでリスト、:あなたはそれらの線

listToBeDisplayed = [line for line in allList if line.startswith(userI)] 
for line in listToBeDisplayed : 
    print line 
+0

あなたは、1回の繰り返しで行える何かのために、行の上を不必要にループしています。 – 0xc0de

+0

合意し、読みやすく、最適化がポイントではありませんでした。 ;) – iFlo

+0

私にはうまくいかなかったようですが、単に「続行」しか表示されません。 :/ – tyroneH

0

を追加することができ

print("continue") 

あなたが実際に適用されていませんメインロジック、あなたは入力処理を行って、ファイルを正しく開きます。

あなたが必要:

else: 
    # Bad variable name, see python.org/dev/peps/pep-0008/#id36 
    for line in allList 
     if line.startswith(userI): 
      print line 

elif userI.isdigit(): 

UPDATE:それとは別に

# raw_input() instead of input() 
userI = raw_input("Please input a single letter: ") 

、私はあなたをテストした:

をあなたの更新されたコードを見た後、私が提案するもう一つの変更は、ありますコード内にあり、pathが指すファイル内にテキストデータがあることを前提としています。また別のノートstartswithは大文字と小文字を区別するので、大文字と小文字を大文字にしてください。

+0

私のために働いていませんでした:/ – tyroneH

+0

それは何も印刷されませんでした、ただ空白行:/ – tyroneH

+0

@tyroneH:そのファイルに空白でない行がありますか?それ以外の場合は、更新したコードを共有してください – 0xc0de

関連する問題