Этот образец кода решит вашу проблему. Метод price_all_walls принимает четыре аргумента. В методах wall_1(), wall_2(), wall_3() и wall_4() вы вызываете price_all_walls() только с одним аргументом (цена на стену). Это вызовет ошибку «определение функции не существует».
Когда вы определяете функцию, с ней связан прототип функции (хотя этот термин чаще всего используется в языках программирования C и C++), который включает имя метода и подпись типа (типы параметров -> не применимы в питон, тип возврата и т. д.). При вызове метода price_all_walls(), он должен быть вызван с четырьмя аргументами и, следовательно, ваш код может быть изменен следующим образом:
def wall_1():
height = int(input("Enter the height in meters of wall 1 :"))
width = int(input("Enter the width in meters of wall 1:"))
wall_1_price = height * width
wall_2(wall_1_price)
def wall_2(wall_1_price):
height = int(input("Enter the height in meters of wall 2:"))
width = int(input("Enter the width in meters of wall 2:"))
wall_2_price = height * width
wall_3(wall_1_price, wall_2_price)
def wall_3(wall_1_price, wall_2_price)
height = int(input("Enter the height in meters of wall 3:"))
width = int(input("Enter the width in meters of wall 3:"))
wall_3_price = height * width
wall_4(wall_1_price, wall_2_price, wall_3_price)
def wall_4(wall_1_price, wall_2_price, wall_3_price):
height = int(input("Enter the height in meters of wall 4:"))
width = int(input("Enter the width in meters of wall 4:"))
wall_4_price = height * width
price_all_walls(wall_1_price, wall_2_price, wall_3_price, wall_4_price)
def price_all_walls(wall_1_price, wall_2_price, wall_3_price, wall_4_price):
print("The total price so far is : " + str(wall_1_price + wall_2_price + wall_3_price + wall_4_price))
if __name__=="__main__":
wall_1()
Хотя это очень неэффективный способ не делать этого (не хороший программист будет когда-либо предложить это). Этот пример дает хорошее объяснение этому вопросу.
Если вы хотите, чтобы закодировать эту проблему, я предлагаю вам использовать глобальную переменную или сделать это так, как показано в коде ниже:
def wall_1():
height = int(input("Enter the height of wall 1 :"))
width = int(input("Enter the width of wall 1 :"))
wall_1_price = height * width
return wall_1_price
def wall_2():
height = int(input("Enter the height of wall 2:"))
width = int(input("Enter the width of wall 2:"))
wall_2_price = height * width
return wall_1_price
def wall_3():
height = int(input("Enter the height of wall 3:"))
width = int(input("Enter the width of wall 3:"))
wall_3_price = height * width
return wall_3_price
def wall_4():
height = int(input("Enter the height of wall 4:"))
width = int(input("Enter the width of wall 4:"))
wall_4_price = height * width
return wall_4_price
def price_all_walls(wall_1_price, wall_2_price, wall_3_price, wall_4_price):
return wall_1_price + wall_2_price + wall_3_price + wall_4_price
if __name__=="__main__":
wall_1_price = wall_1()
wall_2_price = wall_2()
wall_3_price = wall_3()
wall_4_price = wall_4()
print("The total price of the walls is : " + str(price_all_walls(wall_1_price, wall_2_price, wall_3_price, wall_4_price)))
Хотя кто-то может предположить, что наилучшим образом сделать это было бы следующим образом. Объявите функцию wall_n (int, int), которая принимает значения высоты и ширины в качестве аргументов и возвращает цену стены. Это приводит к модульному коду, а также обеспечивает повторное использование.
def wall_n(height, width):
wall_n_price = height * width
return wall_n_price
def price_all_walls(prices):
total_price = 0
for price in prices:
total_price += price
return total_price
if __name__=="__main__":
number_walls = int(input("Enter the number of walls to build : "))
wall_prices = []
for i in range(number_walls):
height = int(input("Enter the height of wall " + str(i) + " : "))
width = int(input("Enter the width of wall " + str(i) + " : "))
wall_prices.append(wall_n(height, width))
print("The total price is : " + str(price_all_walls(wall_prices)))
Я не продемонстрировал использование глобальных переменных. Вы можете прочитать об этом here
Надеюсь, это ответит на ваш вопрос.
Не описывайте свой сломанный код, разместите его. Если бы вы знали достаточно о том, что неправильно, чтобы правильно описать его, вы не просите о помощи. Любые ключевые слова, которые мы вам даем, будут основаны на неправильных предположениях. С другой стороны, если вы зададите правильный вопрос, вы можете получить лучший ответ, чем ожидалось. –
Пожалуйста, разместите существующий рабочий/сломанный код для большей ясности. – aditya