Программа выдает ошибку: NameError: name 'k' is not defined. Суть программы описана в комментариях, никак не могу понять почему не работает. Спасибо!
#Что больше сумма нечетных чисел от 1 до 199 или сумма четных 2 до 198?
print('Привет! Если ты хочешь узнать, что больше: сумма нечетных чисел от 1 до 199 или сумма четных от 2 до 198, то скажи "Да"')
def vv():
k=input()
vv()
if k == 'Да':
print('Тогда держи ответ')
elif k == 'Нет':
print('Хорошо! Тогда не буду отвлекать тебя!')
exit()
else:
print('Какой-то некорректный ответ. Давай еще разок!!')
vv()
s = 0
i = 1
while i <= 199:
if i % 2 != 0:
s += i
i += 1
print('Сумма нечетных чисел от 1 до 199 равна ',s)
a = 0
b = 2
while b <= 198:
if b % 2 == 0:
a += i
b += 1
print('Сумма четных чисел от 2 до 198 равна ',a)
Ответы (2 шт):
Автор решения: Vitness
→ Ссылка
Потому что k - локальная переменная, существующая только внутри функции vv. Не выноси ввод внутрь функции/используй global (не советую)/используй return
Автор решения: RuslanZanevskiy
→ Ссылка
Все дело в области видимости переменных. Если ты создаешь переменную в функции то вне функции ты не сможешь к ней обратиться т.к. она пропадет из видимости. Решений есть несколько:
- Можно сделать переменную k глобальной и тогда к ней можно будет обращаться отовсюду. (Для данной ситуации это явно не оптимально решение, но про него важно знать)
- Переписать функцию, что бы она возвращала значение, а уже в программе принимать его в переменную.
Но это лишь уберет ошибку NameError, но что более важно логика программы явно не придусматривает повторного ввода, т.к. даже когда повторно вызывается функция vv, то мы не проверяем значение k, а переходим к подсчету. Что бы решить все проблемы можно использовать цикл while:
k = input()
while not (k == 'Да' or k == 'Нет'): #будет работать пока не скажем Да или Нет
print('Какой-то некорректный ответ. Давай еще разок!!')
k = input()
if k == 'Да':
print('Тогда держи ответ')
else:
print('Хорошо! Тогда не буду отвлекать тебя!')
exit()