2011-07-13 3 views
-4

У меня возникли проблемы с получением инструкции «Else» для работы.Простая инструкция IF в python

Мой код выглядит следующим образом до сих пор:

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» о «Доходе», но он не примет его. Любые идеи?

+0

Думаю, вам нужно 'else' для' for'-цикла. И действительно ли вы хотите закрыть файл после первой итерации цикла? – DrTyrsa

+2

'Else:' должно быть на том же уровне, что и 'if ..:' - возможно, вы могли бы написать код, который делает _not_ для вас в дополнение к вышеуказанному. – 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 в любом случае, куда бы вы отправились? Это выглядит очень странно, как задание, поэтому я не собираюсь публиковать точное решение.

Смежные вопросы