2016-11-24 4 views
0

Очень начинающий программист здесь, в процессе обучения. Мне просто интересно, является ли этот простой код, который я набрал, наиболее оптимальным способом сделать это.Есть ли способ сократить это?

with open('guest_book.txt', 'a') as file_object: 
    while True: 
     name=input("What is your name?") 
     print("Welcome " + name + ", have a nice day!") 
     file_object.write(name + " has visited! \n") 
     another = input("Do you need to add another name?(Y/N)") 
     if another == "y": 
      continue 
     elif another == "n": 
      break 
     else: 
      print("That was not a proper input!") 
      while True: 
       another = input("Do you need to add another name?(Y/N)") 
       if another == "y": 
        a = "t" 
        break 
       if another == "n": 
        a = "f" 
        break 
      if a == "t": 
       continue 
      else: 
       break 

Мои вопросы приведены в операторах if. Когда я спрашиваю вход («Нужно ли добавить другое имя? (Y/n)», это то, что я набрал наилучший способ задать вопрос, если я получу ответ, отличный от y или n. В принципе, я хочу .. вопрос необходимо повторить, если я не получаю ни да или нет ответа, и решение, которое я нашел не кажется наиболее оптимальным решением

+1

Поскольку вы новичок, обзор на код, как правило, делается на http://codereview.stackexchange.com/, пожалуйста, напишите это там. – ishaan

+0

Добавьте «продолжить» сразу после печати «Это был не правильный ввод». – sal

+0

Возможный дубликат [Запросить пользователя для ввода до тех пор, пока он не даст действительный ответ] (http://stackoverflow.com/questions/23294658/asking-the-user-for-input-until-they-give-a-valid- ответ) – tripleee

ответ

2

Вы в основном там Вы можете просто:

with open('guest_book.txt', 'a') as file_object: 
    while True: 
     name=input("What is your name?") 
     print("Welcome " + name + ", have a nice day!") 
     file_object.write(name + " has visited! \n") 
     another = input("Do you need to add another name?(Y/N)") 
     if another == "y": 
      continue 
     elif another == "n": 
      break 
     else: 
      print("That was not a proper input!") 
      continue 
0

Вы можете использовать функцию, чтобы написать всю логику в одном месте.

def calculate(file_object): 
    name=raw_input("What is your name?") 
    print("Welcome " + name + ", have a nice day!") 
    file_object.write(name + " has visited! \n") 
    another = raw_input("Do you need to add another name?(Y/N)") 
    if another == "y": 
     calculate(file_object) 
    elif another == "n": 
     return 
    else: 
     print("That was not a proper input!") 
     calculate(file_object) 

if __name__=='__main__':  
    with open('guest_book.txt', 'a') as file_object: 
     calculate(file_object) 
0

Вы можете сделать это так, но есть не будет какого-либо недопустимого ввода для высказывания «нет». Он будет проверять только говоря y

with open('guest_book.txt', 'a') as file_object: 
    another = 'y' 
    while another.lower() == 'y': 
     name=input("What is your name?") 
     print("Welcome " + name + ", have a nice day!") 
     another = input("Do you need to add another name?(Y/N)") 
Смежные вопросы