main () не работает должным образом

#python #function #python-3.x

#python #функция #python-3.x

Вопрос:

 def load():    
    global name
    global count
    global shares
    global pp
    global sp
    global commission
    name=input("Enter stock name OR -999 to Quit: ")
    count =0
    while name != '-999':
        count=count 1
        shares=int(input("Enter number of shares: "))
        pp=float(input("Enter purchase price: "))
        sp=float(input("Enter selling price: "))
        commission=float(input("Enter commission: "))
        name=input("nEnter stock name OR -999 to Quit: ")

totalpr=0
def calc():
    global amount_paid
    global amount_sold
    global profit_loss
    global commission_paid_sale
    global commission_paid_purchase
    global totalpr
    amount_paid=shares*pp
    commission_paid_purchase=amount_paid*commission
    amount_sold=shares*sp
    commission_paid_sale=amount_sold*commission
    profit_loss=(amount_sold - commission_paid_sale) -(amount_paid   commission_paid_purchase)
    totalpr=totalpr profit_loss

def display():
    print("nStock Name:", name)
    print("Amount paid for the stock:       $",      format(amount_paid, '10,.2f'))
    print("Commission paid on the purchase: $", format(commission_paid_purchase, '10,.2f'))
    print("Amount the stock sold for:       $", format(amount_sold, '10,.2f'))
    print("Commission paid on the sale:     $", format(commission_paid_sale, '10,.2f'))
    print("Profit (or loss if negative):    $", format(profit_loss, '10,.2f'))

def main():
    load()
    calc()
    display()

main()

print("nTotal Profit is $", format(totalpr, '10,.2f'))
 

Мне нужен main(): для вызова load(),calc() и display() в таком порядке. Однако программа останавливается после загрузки. Вывод будет просто циклически загружать без вычисления или печати.

Мне было специально дано указание НЕ помещать calc() и display() в блок цикла while, каким бы заманчивым это ни было. Также обратите внимание, что это решает проблему, но это не то решение, которое я специально ищу.

Что мне нужно сделать, чтобы эта программа работала правильно?

ВЫВОД ДОЛЖЕН ВЫГЛЯДЕТЬ СЛЕДУЮЩИМ ОБРАЗОМ:

 Enter stock name OR -999 to Quit: APPLE
Enter number of shares: 10000
Enter purchase price: 400
Enter selling price: 800
Enter commission: 0.04

Stock Name: APPLE
Amount paid for the stock:       $ 4,000,000.00
Commission paid on the purchase: $ 160,000.00
Amount the stock sold for:       $ 8,000,000.00
Commission paid on the sale:     $ 320,000.00
Profit (or loss if negative):    $ 3,520,000.00

Enter stock name OR -999 to Quit: FACEBOOK
Enter number of shares: 10000
Enter purchase price: 5
Enter selling price: 500
Enter commission: 0.04

Stock Name: FACEBOOK
Amount paid for the stock:       $  50,000.00
Commission paid on the purchase: $   2,000.00
Amount the stock sold for:       $ 5,000,000.00
Commission paid on the sale:     $ 200,000.00
Profit (or loss if negative):    $ 4,748,000.00

Enter stock name OR -999 to Quit: -999
Total Profit is $ 14,260,000.00
 

ВОТ РЕЗУЛЬТАТ, КОТОРЫЙ Я ПОЛУЧАЮ (КОТОРЫЙ МНЕ НЕ НУЖЕН):

 ====== RESTART: C:UsersElsaDesktopHomework 3, Problem 1.py ======
Enter stock name OR -999 to Quit: YAHOO!
Enter number of shares: 10000
Enter purchase price: 10
Enter selling price: 100
Enter commission: 0.04

Enter stock name OR -999 to Quit: GOOGLE
Enter number of shares: 10000
Enter purchase price: 15
Enter selling price: 150
Enter commission: 0.03

Enter stock name OR -999 to Quit: -999

Stock Name: -999
Amount paid for the stock:       $ 150,000.00
Commission paid on the purchase: $   4,500.00
Amount the stock sold for:       $ 1,500,000.00
Commission paid on the sale:     $  45,000.00
Profit (or loss if negative):    $ 1,300,500.00

Total Profit is $ 1,300,500.00
>>> 
 

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

1. «Мне нужен main(): для вызова load(), calc() и display() в таком порядке». — и это происходит. Работа выполнена, верно? «Однако программа останавливается после загрузки». — нет. Нет, это не так. Ваш вывод четко показывает, что он переходит к calc и display .

2. Похоже, вы неправильно поняли требования к своему проекту. Поскольку вы на самом деле не сообщили нам о своих требованиях к проекту, мы мало чем можем вам помочь.

3. Независимо от того, как я начинаю формулировать проблему, я бы хотел, чтобы она выглядела как образец вывода, который я предоставил. Как мне добраться до этой точки, не касаясь def main:()?

4. calc и display должны находиться внутри некоторого цикла, если они не каждый, будет запущен только один раз. Если вы хотите, чтобы функция вызывалась более одного раза, вы помещаете ее в цикл. Переместить ur во время цикла в main, что-то вроде: while name != '-999': load(); calc(); display()

5. С таким main , как у вас, load происходит, затем calc происходит, затем display происходит, и все готово. Вам нужен цикл загрузки данных, выполнения с ними вычислений и отображения результата. Для этого требуется цикл вокруг 3 функций.

Ответ №1:

Я думаю, что это решение (одно из многих), которое вы, вероятно, могли бы принять:

   def load():    
    shares=int(input("Enter number of shares: "))
    pp=float(input("Enter purchase price: "))
    sp=float(input("Enter selling price: "))
    commission=float(input("Enter commission: "))
    return shares, pp, sp, commission


def calc(totalpr, shares, pp, sp, commission):
    amount_paid=shares*pp
    commission_paid_purchase=amount_paid*commission
    amount_sold=shares*sp
    commission_paid_sale=amount_sold*commission
    profit_loss=(amount_sold - commission_paid_sale) -(amount_paid   commission_paid_purchase)
    totalpr=totalpr profit_loss
    return (amount_paid, commission_paid_purchase, amount_sold,
            commission_paid_sale, profit_loss, totalpr)

def display(name, amount_paid, commission_paid_purchase, 
            amount_sold, commission_paid_sale, profit_loss):
    print("nStock Name:", name)
    print("Amount paid for the stock:       $",      format(amount_paid, '10,.2f'))
    print("Commission paid on the purchase: $", format(commission_paid_purchase, '10,.2f'))
    print("Amount the stock sold for:       $", format(amount_sold, '10,.2f'))
    print("Commission paid on the sale:     $", format(commission_paid_sale, '10,.2f'))
    print("Profit (or loss if negative):    $", format(profit_loss, '10,.2f'))

def main():
    totalpr = 0
    name=input("Enter stock name OR -999 to Quit: ")
    while name != '-999':
        shares, pp, sp, commission = load()
        am_paid, com_paid_purch, am_sold, 
        com_paid_sale, profit_loss, totalpr = calc(totalpr, shares, pp, sp, commission)
        display(name, am_paid, com_paid_purch, 
               am_sold, com_paid_sale, profit_loss)
        name=input("Enter stock name OR -999 to Quit: ")
    return totalpr
totalpr = main()

print("nTotal Profit is $", format(totalpr, '10,.2f'))