Найти - Пользователи
Полная версия: Переменная из функции не обнаруживается после вызова этой функции
Начало » Python для новичков » Переменная из функции не обнаруживается после вызова этой функции
1
Like_a_Doshi
Приветствую.
Есть функция на проверку ввода положительного числа.
Но когда выполняется расчет после её вызова в строке “a = 5 + your_number_name” питон ругается, что переменная your_number_name не объявлена. Как это? я же объявил ее в функции выше.
Если поместить расчет в саму функцию после else то все работает, но смысл теряется.

 def check_positive_number():
	qop = 0
	text_input = "Введите x:"
	text_enter_string = "Введите числовое значение"
	text_enter_minus_number = "Введите положительное число"
	text_null = "Пустовато :("
	while qop == 0:
		try:
			your_number_name = int(input(text_input))
		except ValueError:
			print(text_enter_string)
			continue
		if your_number_name < 0:
			print(text_enter_minus_number)
		elif your_number_name == 0:
			print(text_null)
		else:
			qop+= 1
print("a = 5 + x")
check_positive_number()
a = 5 + your_number_name
print("a = ", a)
PEHDOM
Like_a_Doshi
Как это? я же объявил ее в функции выше.
бугагашечки, читаем про области видимости https://python-scripts.com/scope
Like_a_Doshi
PEHDOM
еее, заработало.
добавил это
 global your_number_name

благодарю
JOHN_16
Это конечно все здорово, но не думали ли вы что Вам нужна в данном случае функция которая будет уже принимать переданное пользователем значение и проверять его? Либо функция должна называться как то check_and_return и возвращать пользовательское значение?
Вместо этого вы делаете не хороший прием для данного конкретного случая
Like_a_Doshi
JOHN_16
Это конечно все здорово, но не думали ли вы что Вам нужна в данном случае функция которая будет уже принимать переданное пользователем значение и проверять его? Либо функция должна называться как то check_and_return и возвращать пользовательское значение? Вместо этого вы делаете не хороший прием для данного конкретного случая
А как отличить хороший приём от плохого сенсей?

DamMercul
Смотри. Вот пример:
 def get_num():
    while True:
        _num = input("Ur num noob: ")
        if not _num:
            print("No stdin!")
            continue
        if not _num.isdigit():
            print("Ti durak  shto li? Nado chislo, i chtobi poloshitelnoe!!")
            continue
        return _num
print(f"Ur formatted num: {int(get_num) + 5}")

Просто ты неправильно распределил задачи, функция не должна быть связана с остальным кодом, ее задача что-то делать с данными или модифицировать полученные аргументы и похже их возвращать, это было сделано чтобы код не был слишком длинным и грязным, если ты хочешь сделать, чтобы она меняла your_num, то тогда тупо убери def и вместо вызова функции сделай какую-то переменную, содержащую предыдущие результаты.

P.S. 3 раз меняю, надоело уже) случайно enter нажал (2 раза ё маё)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB