2016-06-22 13 views
0

У меня есть проблема для решения на Python, посредством которой пользователь вводит переменные, такие как количество элементов, которые они хотят купить. У меня это как def customer, с выходом «сколько виджетов вам понравится», а затем их вход умножается на цену в 10 фунтов. Этот бит работает отлично.Python как использовать входы от подпрограмм в другой подпрограмме

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

Вот мой код до сих пор:

def wall_1(): 
    height = int(input("Enter the height in metres of wall 1 : ")) 
    width = int(input("Enter the width in metres of wall 1 : ")) 
    wall_1_price = height * width 
    price_all_walls(wall_1_price) 
def wall_2(): 
    height = int(input("Enter the height in metres of wall 2 : ")) 
    width = int(input("Enter the width in metres of wall 2 : ")) 
    wall_2_price = height * width 
    price_all_walls(wall_2_price) 
def wall_3(): 
    height = int(input("Enter the height in metres of wall 3 : ")) 
    width = int(input("Enter the width in metres of wall 3 : ")) 
    wall_3_price = height * width 
    price_all_walls(wall_3_price) 
def wall_4(): 
    height = int(input("Enter the height in metres of wall 4 : ")) 
    width = int(input("Enter the width in metres of wall 4 : ")) 
    wall_4_price = height * width 
    price_all_walls(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() 
    wall_2() 
    wall_3() 
    wall_4() 
    price_all_walls() 
+0

Не описывайте свой сломанный код, разместите его. Если бы вы знали достаточно о том, что неправильно, чтобы правильно описать его, вы не просите о помощи. Любые ключевые слова, которые мы вам даем, будут основаны на неправильных предположениях. С другой стороны, если вы зададите правильный вопрос, вы можете получить лучший ответ, чем ожидалось. –

+0

Пожалуйста, разместите существующий рабочий/сломанный код для большей ясности. – aditya

ответ

0

Этот образец кода решит вашу проблему. Метод 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

Надеюсь, это ответит на ваш вопрос.

+0

Удивительно, большое вам спасибо за то, что нашли время, чтобы помочь мне. Будьте здоровы! –

+0

Счастливые помочь. Благодарю. – aditya

+0

Вы можете отметить это как ответ. Другие люди могут воспользоваться этим. – aditya

0

Я не уверен, если я правильно понял ваш вопрос, но это может помочь.

def customer(): 
    number_items = int(input("Enter the number of items to buy : ")) 
    print("Widgets that you would like : £" + str(number_items * 10)) 
    total_price = number_items * 10 
    further_maths(number_items, total_price) # Call to another subroutine further_maths with parameters number_items and total_price 

def further_maths(number_items, total_price): # Subroutine definition 
    print("The total number of items in another subroutine : " + str(number_items)) 
    print("The total price in another subroutine : " + str(total_price)) 

if __name__ == "__main__": 
    customer() 

В этом коде параметры внутри подпрограммы клиента() передаются в другую подпрограмму further_maths().

+1

Это было так, так, так полезно. Большое спасибо! У меня есть хотя бы часть его работы! –

+0

У меня есть бит, работающий, а затем беспорядок других бит вверх: –

+0

Я рад, что мог бы помочь. – aditya

 Смежные вопросы

  • Нет связанных вопросов^_^