Python: Yes/No диалог — функции, операторы try, exept

Автор: | 04/30/2014
 

PythonПример диалога yes/no на Python, который можно использовать в скриптах.

Похожая функция на bash — есть в статье BASH: использование функций, примеры.

Пример писался на:

# python --version
Python 2.7.6

Оригинал был взял из книги Г.Россум, Ф.Л.Дж.Дрейк, Д.С.Откидач — Язык программирования Python.

Код:

$ cat yesno.py
#!/usr/bin/env python

import sys

# задаём функцию выхода, первым аргументом будем передавать сообщение при выходе
def exit(exit_message):
        print exit_message
        sys.exit(0)

'''Собственно - функция диалога.
Первым аргументом принимаем ответ пользователя,
вторым - выдаём сообщение при неверном вводе'''
def answer(prompt, choice='Yes or no, please!'):
        while True:
                result = raw_input(prompt)
                if result in ('y', 'Y', 'yes', 'Yes'):
                        print 'nAs you choice "YES" - exiting now.n'
                        '''тут можно использовать оператор break вместо return
                        так же и в ответе No'''
                        return False
                elif result in ('n', 'N', 'no', 'No'):
                        print 'nAs your choice "NO" - I'll stay here...n'
                        a = 1
			'''тут просто цикл для демонстрации
                        использования оператора else в циклах'''
                        while a < 10:
                                print 'I'm number ' + str(a) + ' :-)'
                                a = a + 1
                        else:
                                exit('nExiting.n')
                else:
                        print(choice)

'''
используем операторы try и except, что бы корректно и красиво завершить скрипт при Ctrl+C (KeyboardInterrupt - SIGINT)
или Ctrl+D (EOFError - SIGQUIT) командах
'''
try:
        answer('nAre you sure to quite? ('y' or 'n', Ctrl+C for exit) ')
except (KeyboardInterrupt, EOFError):
        exit('nnExiting.n')
finally:
        print 'Tha's all folks.n'

Результаты работы:

# ./yesno.py

Are you sure to quite? ('y' or 'n', Ctrl+C for exit) O
Yes or no, please!

Are you sure to quite? ('y' or 'n', Ctrl+C for exit) y

As you choice "YES" - exiting now.

Tha's all folks.
# ./yesno.py

Are you sure to quite? ('y' or 'n', Ctrl+C for exit) n

As your choice "NO" - I'll stay here...

I'm number 1 :-)
I'm number 2 :-)
I'm number 3 :-)
I'm number 4 :-)
I'm number 5 :-)
I'm number 6 :-)
I'm number 7 :-)
I'm number 8 :-)
I'm number 9 :-)

Exiting.

Tha's all folks.