Задать вопрос
@Xlebulllek

Как сделать проверку символов с возвратом на строку кода?

Приветствую всех. Есть программа на Python в виде теста. Для примера взял небольшой ее отрывок:
Код
import os
clear = lambda: os.system('cls')
score = 0
mark = 0
otvet1 = ''
otvet2 = ''
otvet3 = ''
otvet4 = ''
otvet5 = ''
otvet6 = ''
otvet7 = ''
otvet8 = ''
otvet9 = ''
otvet10 = ''
nexxt = ''
oshibka1 = False
oshibka2 = False
oshibka3 = False
oshibka4 = False
oshibka5 = False
oshibka6 = False
oshibka7 = False
oshibka8 = False
oshibka9 = False
oshibka10 = False
letters = 'qwertyuiop[]asdfghjkl;zxcvbnm,./йцукенгшщзхъфывапролджэячсмитьбю*-+'
print("Для начала теста нажмите клавишу Enter")
start = (input())
if(start == ""):
	clear()
	print("Вопрос номер 1:")
	print("")
	print('Соотнесите события с вариантом ответа:\n'
		'А) Учреждение сената\n'
		'Б) Соляной Бунт\n'
		'В) Заключение Бухарестского мира с Османской Империей\n'
		'')
	print('Годы: \n'
		'1)1552 г.\n'
		'2)1648 г.\n'
		'3)1711 г.\n'
		'4)1807 г.\n'
		'5)1812 г.')
	otvet1 = input("Введите порядок цифр согласно буквам: ")
	if (otvet1 == "325"):
		score = score+1
		print('Ответ верный. Вы заработали 1 балл.\n'
			'\n'
			'Текущее количество баллов: ' +str(score))
		nexxt = (input("Для продолжения нажмите клавишу Enter: "))
		if nexxt == '':
			clear()
	else:
		print("Ответ неверный ")
		oshibka1 = True
		nexxt = (input("Для продолжения нажмите клавишу Enter: "))
		if nexxt == '':
			clear()

Есть переменная letters, в которой хранятся все недопустимые символы для переменной otvet1. Необходимо, чтобы в случае наличия любого символа переменной letters в переменной otvet1, выдавало ошибку, а программа вовзращалось в место ввода вопроса. Как я могу это сделать? В голову ничего не лезет вообще
  • Вопрос задан
  • 176 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 2
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Есть много вариантов, как сделать проверку.

Например, сделать функцию проверки, скажем check_answer, которая принимает строку ответа и возвращает логическое значение (если всё хорошо, то True, иначе False).
Затем сделать конструкцию
while not check_answer(otvet):
    otvet = input()

и пока check_answer не вернёт True, этот цикл будет повторяться.

Однако, в вашем коде есть еще много существенных недостатков, которые сильно затруднят вам жизнь.
  • Во-первых, это нумерованные переменные. Вместо них удобно использовать кортеж, список или словарь. Такие структуры можно перебирать в цикле (итерировать) и каждый следующий элемент обрабатывать одним и тем же набором функций.
  • Кроме того, код хорошо бы разделить на функции, например так: если код делает «то, это и вот это», то у вас должны появиться функции «делай то», «делай это», «делай вот это» и еще функция «выполнить программу», изнутри которой находятся вызовы остальных функций и внутри которой каждая функция получает и возвращает в следующие функции обрабатываемые данные и результаты обработки.

Такую программу проще отлаживать по частям, можно многократно использовать одну функцию, давая ей на вход разные данные, всё будет более стройно и красиво.

С другой стороны,
python позволяет всё плотненько скомкать чуть не до пары длиннющих нечитаемых строк, но так делать вам пока не надо.
Ответ написан
@ceytnot
Работаю не по специальности (:
Я так понимаю вам нужно исключить любые символы кроме чисел.
Можно провести проверку, что вводимые пользователем данные являются числом, а не буквой или иным знаком.

def symbol_check():    #объявляем функцию, которая будет это делать
    try: # говорим, что хотим обработать исключения
        arg = input()    #просим пользователя ввести данные 
        arg = int(arg)   # и пытаемся перевести строку в тип данных int
        return arg # если получается, возвращаем введенное значение
    except ValueError:    # если возвращается ошибка, 
        print("введены недопустимые симовлы") #ругаем пользователя
        symbol_check()  #и просим ввести еще раз, и так пока пользователь не введет корректно
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы