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

Почему не происходит выход из цикла в python 3.8.0?

Обучаюсь программированию на python 3.8, раньше программировал на PascalABC. Не могу понять почему не происходит выход из цикла и завершение работы.
print('\n')
print('Калькулятор\n\n')
while True:
	x = int(input('Введите первое число: '))
	y = int(input('Введите второе число: '))
	z = input('Введите знак: ')
	res = 0
	if z == '+':
		res = x + y
		print('Ваш результат: ',res)
		c = input('Продолжить работу? Д/Н ')
		if c == ('Да') or ('да') or ('Yes') or ('yes') or ('y') or ('Y') or ('д') or ('Д'):
			continue
		elif c == ('Нет') or ('нет') or ('No') or ('no') or ('n') or ('N'):
			break
	elif z == '-':
		res = x - y
		print('Ваш результат: ',res)
		c = input('Продолжить работу? Д/Н ')
		if c == ('Да') or ('да') or ('Yes') or ('yes') or ('y') or ('Y') or ('д') or ('Д'):
			continue
		elif c == ('Нет') or ('нет') or ('No') or ('no') or ('n') or ('N'):
			break
	elif z == '*':
		res = x * y
		print('Ваш результат: ',res)
		c = input('Продолжить работу Д/Н? ')
		if c == ('Да') or ('да') or ('Yes') or ('yes') or ('y') or ('Y') or ('д') or ('Д'):
			continue
		elif c == ('Нет') or ('нет') or ('No') or ('no') or ('n') or ('N'):
			break
	elif z == '/':
		res = x / y
		print('Ваш результат: ',res)
		c = input('Продолжить работу? Д/Н ')
		if c == ('Да') or ('да') or ('Yes') or ('yes') or ('y') or ('Y') or ('д') or ('Д'):
			continue
		elif c == ('Нет') or ('нет') or ('No') or ('no') or ('n') or ('N'):
			break


Помогите пожалуйста)
  • Вопрос задан
  • 312 просмотров
Подписаться 2 Простой 4 комментария
Решения вопроса 1
Guest007
@Guest007
Django, Python, Linux и всё такое...
Да, дружище, это не Паскаль

Подумай, с чем ты сравниваешь переменную 'c'? Не с ДА или YES, а с результатом логической операции or
т.е. твоё ('Да') or ('да') всегда вернёт True
Переменная же 'c' - не пустая, а, значит, тоже True в смысле булевых отношений. Так что у тебя всегда "ДА"
Если переделывать твой Паскаль-код, то это, скорее,
if c == 'Yes' or c == 'yes' or c == 'y' и т.д.

Но лучше писать сразу на Питоне: проверяй полученное значение на вхождение в список. Так проще:
if c in ['Yes', 'yes', 'y', 'Да']:

Но у тебя сплошной повтор одного и того же (плюс я могу ж и "YES" ввести!). Будь проще:
if c.lower() in ['yes', 'y', 'да', 'д']:

Далее - вынеси блок
c = input('Продолжить работу? Д/Н ')
if c == ('Да') or ('да') or ('Yes') or ('yes') or ('y') or ('Y') or ('д') or ('Д'):
  continue
elif c == ('Нет') or ('нет') or ('No') or ('no') or ('n') or ('N'):
  break

после оператора if. Тогда он будет у тебя написан один раз. Это правильно. Не повторяй себя.

Ну, как-то так...

print('\n')
print('Калькулятор\n\n')
while True:
  x = int(input('Введите первое число: '))
  y = int(input('Введите второе число: '))
  z = input('Введите знак: ')
  res = 0
  if z == '+':
    res = x + y
  elif z == '-':
    res = x - y
  elif z == '*':
    res = x * y
  elif z == '/':
    res = x / y
  else:
    print('Оператор обязателен и может быть только + или - или * или / ')
    continue

  print('Ваш результат: ',res)
  c = input('Продолжить работу? Д/Н ')
  if c.lower() in ['да', 'yes','y', 'д']:
    continue
  elif c.lower() in ['нет', 'no', 'n', 'н']:
    break


Тут можно ещё много чего усовершенствовать, но, надеюсь, главное ты понял :-)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Tyrel
Может быть, потому, что Вы в качестве ответа "нет" вводите "н", а в список вариантов его добавить забыли?
Ответ написан
Ваш ответ на вопрос

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

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