Уведомления

Группа в Telegram: @pythonsu

#1 Июль 26, 2018 09:09:19

Like_a_Doshi
Зарегистрирован: 2018-07-06
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Переменная из функции не обнаруживается после вызова этой функции

Приветствую.
Есть функция на проверку ввода положительного числа.
Но когда выполняется расчет после её вызова в строке “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)

Офлайн

#2 Июль 26, 2018 09:30:55

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Переменная из функции не обнаруживается после вызова этой функции

Like_a_Doshi
Как это? я же объявил ее в функции выше.
бугагашечки, читаем про области видимости https://python-scripts.com/scope



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#3 Июль 26, 2018 09:50:44

Like_a_Doshi
Зарегистрирован: 2018-07-06
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Переменная из функции не обнаруживается после вызова этой функции

PEHDOM
еее, заработало.
добавил это
 global your_number_name

благодарю

Офлайн

#4 Июль 26, 2018 11:51:06

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Переменная из функции не обнаруживается после вызова этой функции

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



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Июль 26, 2018 16:23:55

Like_a_Doshi
Зарегистрирован: 2018-07-06
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Переменная из функции не обнаруживается после вызова этой функции

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

Офлайн

#6 Июль 26, 2018 16:56:29

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

Переменная из функции не обнаруживается после вызова этой функции

Смотри. Вот пример:

 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 раза ё маё)



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Отредактировано DamMercul (Июль 26, 2018 16:59:55)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version