2011-07-13 20 views
-4

"Else"文がうまく動作するのに問題があります。Pythonの単純なIF文

私のコードは、これまでのようになります。私は肯定的検索を行うと、私のテキストファイル内に複数の一致を得るとき

roomNumber = (input("Enter the room number: ")) 

def find_details(id2find): 
    rb_text = open('roombookings2.txt', 'r') 
    for line in rb_text: 
     s = {} 
     (s['Date'], s['Room'], s['Course'], s['Stage']) = line.split(",") 
     if id2find == (s['Room']): 
      yield(s) 
     rb_text.close() 


for room in find_details(roomNumber): 
    print("Date: " + room['Date']) 
    print("Room: " + room['Room']) 
    print("Course: " + room['Course']) 
    print("Stage: " + room['Stage']) 

だから、私はよく組織の結果を得ます。

しかし、私は無効な入力データが入力された場合はそれを教えて、正しいデータが入力されるまで部屋番号を再入力するようにしています。

「収量(Else)」については、「収量(Else)」を使用してみましたが、それは受け入れません。 アイデア

+0

私は 'for'-cycleに' else'が必要だと思います。サイクルの最初の反復後に本当にファイルを閉じたいのですか? – DrTyrsa

+2

'Else:'は 'if ..:'と同じレベルでなければなりません。おそらく上記以外にあなたのために働かないコードを投稿することができます。 – Soren

答えて

0

あなたはこのようにそれを行うことができます。

def find_details(id2find): 
    found = False 
    with open('roombookings2.txt', 'r') as rb_text: 
     for line in rb_text: 
      s = {} 
      (s['Date'], s['Room'], s['Course'], s['Stage']) = line.split(",") 
      if id2find == s['Room']: 
       found = True 
       yield(s) 
    if not found: 
     raise ValueError("No such room number!") 

while True: 
    roomNumber = (input("Enter the room number: ")) 
    try: 
     for room in find_details(roomNumber): 
      print("Date: " + room['Date']) 
      print("Room: " + room['Room']) 
      print("Course: " + room['Course']) 
      print("Stage: " + room['Stage']) 
     break 
    except ValueError as e: 
     print str(e) 
1

Pythonのブロックは、その「他:」インデントによって線引きされている(ブロックの開始を示すために、ノート小文字とコロンで)同じにする必要がありますインデントレベルをif文として指定します。

def find_details(id2find): 
    rb_text = open('roombookings2.txt', 'r') 
    for line in rb_text: 
     s = {} 
     (s['Date'], s['Room'], s['Course'], s['Stage']) = line.split(",") 
     if id2find == (s['Room']): 
      yield(s) 
     else: 
      print "this print will execute if d2find != (s['Room'])" 
     # ... also see DrTyrsa's comment on you question. 

しかし、私は本当にelse節を使用したくないと思われますが、どこから行くのですか?これは非常に多くの割り当てのように見えるので、私は正確なソリューションを投稿するつもりはありません。