Ошибка из-за отсутствия определения переменных, не знаю, почему это происходит

#python #subroutine

Вопрос:

#Количество шаров, необходимое для заполнения детской площадки для игры в мяч, можно рассчитать следующим образом: объем площадки для игры в мяч, деленный на объем одного шара, умноженный на плотность упаковки.

#Плотность упаковки обычно составляет 0,75.

#Объем ямы для мяча рассчитывается как: Pi (3,14) * радиус2 * высота ямы для мяча.

#Объем шара рассчитывается как: (4/3) * Пи (3,14) * радиус3.

#Напишите функцию для возврата объема шаровой ямы по двум параметрам: радиусу шаровой ямы и высоте шаровой ямы.

#Напишите функцию для возврата объема шара по одному параметру: радиус шара.

#Программа должна вывести количество шаров, необходимое для заполнения ямы радиусом 1 м и высотой 0,2 м с использованием шаров размером 0,05 м.

     import math
    packing_density=0.75
    def volume_of_ball_pit():
      radius_pit= float(input("Input the radius of the pit"))
      height_pit= float(input("Input the height of the ball pit"))
      volume_pit= math.pi * radius_pit * height_pit
      return volume_pit

    def volume_of_ball():
      radius_ball= float(input("Input the radius of the ball"))
      volume_ball= (math.pi*(4/3))*radius_ball
      return volume_ball

    def balls_required():
      volume_of_ball_pit()
      volume_of_ball()
      number_of_balls= (volume_pit/volume_ball)*packing_density

    balls_required()
 

Я получаю ошибку, в которой мои переменные не определены, однако я думаю, что это уже было сделано в предыдущей подпрограмме, какие-нибудь советы?

Ответ №1:

Вы должны присвоить результаты функций переменным

 def balls_required():
  volume_pit = volume_of_ball_pit()
  volume_ball = volume_of_ball()
  number_of_balls= (volume_pit/volume_ball)*packing_density
 

Комментарии:

1. @Can’tgetmyprogramstowork Рад, что мне удалось помочь. Вы можете принять ответ.

Ответ №2:

переменные не могут видеть друг друга в разных значениях (функциях) , если вы не сделаете их глобальными :

сделайте ваши переменные глобальными в начале кода :

   global radius_pit,height_pit,volume_pit, number_of_balls,
 

Ответ №3:

Прежде всего, объем сферы (здесь, шара) рассчитывается по формуле: (4/3) * pi * (r^3), а объем ямы (я полагаю, цилиндра) рассчитывается по формуле: pi * (r^2) * h

Вот как должен выглядеть фактический код:

 import math
packing_density=0.75
def volume_of_ball_pit():
    radius_pit= float(input("Input the radius of the pit"))
    height_pit= float(input("Input the height of the ball pit"))
    volume_pit= math.pi * radius_pit *radius_pit * height_pit
    return volume_pit

def volume_of_ball():
    radius_ball= float(input("Input the radius of the ball"))
    volume_ball= (math.pi*(4/3))*radius_ball**3
    return volume_ball

def balls_required():
    number_of_balls= (volume_of_ball_pit()/volume_of_ball())*packing_density
    print(number_of_balls)

if __name__ == '__main__':
    balls_required()
 

Это может быть причиной того, что интерпретатор показывает, что ваши переменные не определены.

Комментарии:

1. спасибо, за дополнительную информацию, что такое имя if == ‘ main ‘: часть для

2. Это способ избежать запуска кода при импорте в другую программу на python. Это действительно не нужно, если вы не используете свой код в качестве пакета, поэтому не нужно беспокоиться об этом, даже если вы не используете name==main, ваш код будет работать правильно. Если вам понравилась моя дополнительная информация, вы можете принять мой ответ с зеленой галочкой.

3. @Can’tgetmyprogramstowork, это обычная (хорошая) практика программирования на Python. Это гарантирует, что функция вызывается при выполнении сценария (например, при использовании python my_script.py ), но не при его импорте (при использовании #import my_script в другом файле Python).