Программа выдает ошибку: 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

Все дело в области видимости переменных. Если ты создаешь переменную в функции то вне функции ты не сможешь к ней обратиться т.к. она пропадет из видимости. Решений есть несколько:

  1. Можно сделать переменную k глобальной и тогда к ней можно будет обращаться отовсюду. (Для данной ситуации это явно не оптимально решение, но про него важно знать)
  2. Переписать функцию, что бы она возвращала значение, а уже в программе принимать его в переменную.

Но это лишь уберет ошибку NameError, но что более важно логика программы явно не придусматривает повторного ввода, т.к. даже когда повторно вызывается функция vv, то мы не проверяем значение k, а переходим к подсчету. Что бы решить все проблемы можно использовать цикл while:

k = input()
while not (k == 'Да' or k == 'Нет'): #будет работать пока не скажем Да или Нет
    print('Какой-то некорректный ответ. Давай еще разок!!')
    k = input()

if k == 'Да':
    print('Тогда держи ответ')
else:
    print('Хорошо! Тогда не буду отвлекать тебя!')
    exit()
→ Ссылка