- Yes or No question in Python
- Step 0: Accepting user input
- Step 1: Accept an Answer and Check if it is “yes” or “no”
- Tkinter askyesno
- Introduction to the Tkinter askyesno() function
- Tkinter askyesno() function example
- Summary
- Диалог с пользователем через командную строку: программа Yes/No на Python
- Что такое диалоговая программа и зачем она нужна
- Диалоговая программа Yes/No на Python
- Реализация функции диалога Yes/No на Python
- Объявление функции
- Начальные настройки
- Основной цикл
- Полный код функции
- Пример программы
Yes or No question in Python
To create yes or no questions in Python, we need to have a way of asking a question and taking input from the user. This can be achieved using the input() function in Python 3 and raw_input() in Python 2.
In this case, the question is asked on the , and the answer from the user is accepted. Once the response is typed, the prompt is exited by pressing the ENTER key. This article will show a step-by-step approach to creating yes/no questions in Python.
Note: The last step has the final answer.
Step 0: Accepting user input
Have you ever pulled a successful prank? (yes or no): yes You answered yes
The code above successfully issues a prompt and prints the input, but something is wrong. The user can give any response (not just “yes” or “no”). Let’s address that in the next step.
Step 1: Accept an Answer and Check if it is “yes” or “no”
Output (Take 1)
Have you ever pulled a successful prank? (yes or no): null Your answer can only be yes or no. You answered null
The prompt accepts any answer now, but we have used conditional statements to check that the answer can only be “yes” or “no.” But there is yet another problem. The code is too restrictive when it comes to the responses; for example, the answer “Yes”, “YES”, “yes”, and “y” may mean the same thing, but our code only accepts “yes” as a valid answer. Let’s fix that.
Tkinter askyesno
Summary: in this tutorial, you’ll learn how to use the Tkinter askyesno() function to show a dialog that asks for user confirmation.
Introduction to the Tkinter askyesno() function
Sometimes, you need to ask for user confirmation. For example, if users click the quit button, you want to ask whether they really want to close the application. Or they just accidentally do so:
To show a dialog that asks for user confirmation, you use the askyesno() function.
The dialog will have a title, a message, and two buttons (yes and no).
When you click the yes button, the function returns True . However, if you click the no button, it returns False .
The following shows the syntax of the askyesno() function:
answer = askyesno(title, message, **options)
Code language: Python (python)
Note that the answer is a Boolean value, either True or False .
Tkinter also has another function called askquestion() , which is similar to the askyesno() function except that it returns a string with a value of ‘yes’ or ‘no’ :
answer = askquestion(title, message, **options)
Code language: Python (python)
Tkinter askyesno() function example
The following program illustrates how to use the Tkinter askyesno() function:
When you click the Quit button, it’ll show a confirmation dialog:
If you click the yes button, the application will be closed. Otherwise, it’ll stay.
import tkinter as tk from tkinter import ttk from tkinter.messagebox import askyesno # create the root window root = tk.Tk() root.title('Tkinter Yes/No Dialog') root.geometry('300x150') # click event handler def confirm(): answer = askyesno(title='confirmation', message='Are you sure that you want to quit?') if answer: root.destroy() ttk.Button( root, text='Ask Yes/No', command=confirm).pack(expand=True) # start the app root.mainloop()
Code language: Python (python)
The following is the same program but use the object-oriented programming approach:
import tkinter as tk from tkinter import ttk from tkinter.messagebox import askyesno, askquestion class App(tk.Tk): def __init__(self): super().__init__() self.title('Tkinter Yes/No Dialog') self.geometry('300x150') # Quit button quit_button = ttk.Button(self, text='Quit', command=self.confirm) quit_button.pack(expand=True) def confirm(self): answer = askyesno(title='Confirmation', message='Are you sure that you want to quit?') if answer: self.destroy() if __name__ == "__main__": app = App() app.mainloop()
Code language: Python (python)
Summary
- Use the Tkinter askyesno() function to show a dialog that asks for user confirmation.
- The askyesno() function returns True if you click the yes button, otherwise, it returns False .
- The askquestion() function returns a string with a value of ‘yes’ or ‘no’ instead.
Диалог с пользователем через командную строку: программа Yes/No на Python
Диалоговые программы используются везде, примером может служить любое приложение на вашем компьютере (браузер, видеоплееры, текстовые редакторы и т. д.). Диалог Yes/No — это простой пример диалоговой программы, работающей с командной строкой.
Что такое диалоговая программа и зачем она нужна
Программа, в которой предусмотрено взаимодействие с пользователем, называется диалоговой (интерактивной).
Ввод текста, нажатия на кнопки, загрузка файлов — всё это способы взаимодействия пользователя с приложением.
Диалог между программой и пользователем — это важная часть любого проекта. Если программа работает с одними строго определенными данными, она не несёт какого-либо практического смысла.
Диалоговая программа Yes/No на Python
Диалог может вестись как через графический интерфейс, так и через командную строку. С помощью Python можно реализовать и то и другое, однако общение с пользователем через терминал имеет более простую реализацию и требует меньше кода.
Суть такой программы проста: пользователь отвечает на вопросы, вводя в консоль Yes – да, или No – нет. Не стоит думать, что сейчас актуально взаимодействовать с программой только через графический интерфейс, командная строка также используется.
Например, в операционной системе Linux часто устанавливают программы через командную строку. Система может приостановить процесс и спросить пользователя, желает ли он продолжить установку «Do you want to continue [Y/n]?», для подтверждения он должен ввести Y, иначе N.
Понятно, что диалог через командную строку чаще используется продвинутыми пользователями или техническими специалистами, которых не пугает работа в режиме текстовых команд.
Консольный диалог Yes/No особенно актуален, потому что не требует реализовывать графический интерфейс, который может быть бесполезен для выполнения определённых задач.
Реализация функции диалога Yes/No на Python
Написать консольную диалоговую программу на Python очень просто, однако нужно учесть и продумать некоторые нюансы, такие как неверный ввод от пользователя. Yes/no легко можно заменить на Да/нет, но давайте следовать общепринятым стандартам и использовать английский язык.
Объявление функции
Поместим всю логику диалоговой программы в отдельную функцию, которую объявим так:
def yes_no_dialog(question, default_answer="yes"):
Здесь аргументы означают следующее:
- question – это вопрос, который выводится в командную строку, и на который пользователь должен дать ответ «yes» или «no».
- default_ answer – это необязательный параметр, который будет использоваться в том случае, если пользователь не введет ответ, а просто нажмет Enter.
Начальные настройки
Предположим, что пользователь может вводить не только «yes», но и «y» или «ye». Обработка каждого вариант с помощью условных операторов if — else нецелесообразна и требует много лишнего кода. Поэтому поместим все варианты ответа в словарь:
default_answer позволяет указать предпочтительный вариант ответа, однако это не очевидно для обычного пользователя. В зависимости от содержимого default_answer будем выводить соответствующую подсказку:
if default_answer == None: # Если ответ по умолчанию не определен tip = " [y/n] " # выводим обе буквы в нижнем регистре elif default_answer == "yes": # Если ответ по умолчанию "yes" tip = " [Y/n] " # Выделяем Y elif default_answer == "no": # Если ответ по умолчанию "no" tip = " [y/N] " else: raise ValueError(f'Неверное значение: ')
При вводе аргумента default_answer тоже можно допустить ошибку, поэтому в блоке else мы возбуждаем исключение, которое указывает на неверный ввод.
Основной цикл
Необходимо продумать следующие ситуации, когда пользователь:
- Ничего не вводит, но определен default_answer .
- Вводит верный ответ.
- Вводит неверный ответ.
Для реализации лучше использовать бесконечный цикл. Сначала необходимо вывести вопрос и подсказку, а затем получить ввод пользователя:
while True: print(question + tip + ": ", end="") user_answer = input().lower() # приводим к нижнему регистру
Подробнее про ввод и вывод данных можно почитать здесь.
Теперь ввод необходимо обработать так, чтобы при правильном вводе происходил выход из цикла, а при неправильном цикл начинался заново:
# Если default_answer определен, а пользователь ничего не ввёл if default_answer is not None and user_answer == '': # Выходим из функции, возвращая значение, соответствующее default_answer return answers[default_answer] # Если пользователь ввел верный ответ elif user_answer in answers: return answers[user_answer] # Если ответ неверен, выводим сообщение и продолжаем цикл else: print("Пожалуйста, введите yes/y или no/n\n")
Полный код функции
Соединив все вместе, получаем готовую к использованию функцию для диалога с пользователем:
def yes_no_dialog(question, default_answer="yes"): answers = if default_answer == None: tip = " [y/n] " elif default_answer == "yes": tip = " [Y/n] " elif default_answer == "no": tip = " [y/N] " else: raise ValueError(f'Неверное значение: ') while True: print(question + tip + ": ", end="") user_answer = input().lower() if default_answer is not None and user_answer == '': return answers[default_answer] elif user_answer in answers: return answers[user_answer] else: print("Пожалуйста, введите yes/y или no/n\n")
Пример программы
Предположим, что функция получает несколько вопросов из файла, результаты ответов записываются в другой файл, тогда код программы будет выглядеть так:
a = open("qst.txt", "r", encoding="utf-8") # открываем файл для чтения results = [] for line in a: # читаем файл построчно # Для каждой строки вызываем нашу функцию и помещаем возвращаемое # ею значение в список result results.append(yes_no_dialog(line.strip())) a.close() b = open("results.txt", "w") # Открываем файл для записи for elem in results: # Записываем каждый элемент списка в файл через пробел b.write(str(elem) + " ") b.close()
С помощью метода строк strip удалим лишние символы.
Перед запуском программы на Python надо не забыть подготовить файл с вопросами qst.txt такого вида:
Первый вопрос Второй вопрос Третий вопрос
Чтобы русские буквы корректно отображались — правильно указываем кодировку при открытии файла. В моём случае это encoding=»utf-8″ .
Результатом выполнения будет следующее:
Первый вопрос [Y/n] : Y Второй вопрос [Y/n] : no Третий вопрос [Y/n] : yes
Содержимое файла результата будет следующим: