2016-10-12 3 views
0
#Initialization 
name=0 
count=0 
totalpr=0.0 
#Load 
name=input("Enter stock name OR -999 to Quit: ") 
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: ")) 
    #Calculations 
    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 
    #Output 
    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')) 
    name=input("\nEnter stock name OR -999 to Quit: ") 
print("Total Profit is $", format(totalpr, '10,.2f')) 

def main() 

load() #to input the values 
calc() 
print() 

ご覧のとおり、段落「#計算」の内容を関数に変換して、その段落から呼び出すことはできません。同じことが "#Load"になります(間にwhileループがあるにもかかわらず、何とかそこにすべての入力が必要です)。また、 "#Output"( "print()"とも呼ばれています)を関数にも変換したいと思います。whileループの内容を関数に変換する

私は右下の部分を持っていますが、コードを編集して関数の形にきちんと収まるようにする方法はわかりません。コード自体は問題ありません。関数に変換して呼び出す必要があります。私は呼び出し側の部分を持っているので、私はある意味で後方に働いています。

答えて

0

whileループの内部を関数に変換し、main関数を使用して何度でも関数を呼び出す方法の1つです。

このコードを印刷機能にさらに分解することができます。そのためにreturn文を使用してください。

def calculate(shares,pp,sp,commission,name): 
    totalpr = 0 
    amount_paid=int(shares)*float(pp) 
    commission_paid_purchase=float(amount_paid*commission) 
    amount_sold=int(shares)*float(sp) 
    commission_paid_sale=float(amount_sold*commission) 
    profit_loss=float(amount_sold - commission_paid_sale) -float(amount_paid + commission_paid_purchase) 
    totalpr=totalpr+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')) 
    print("Total Profit is $", format(totalpr, '10,.2f')) 
def main(): 
    name = input("Enter stock:") 
    while name != '-999': 
     calculate(5,1.22,11.33,11.44,name) 
     name = input("Enter stock:") 
main() 
+0

def calc():とdef print()には何が入りますか? def main()はなぜですか:空白ですがdefではありませんcalc():?私の質問は、main、calc、printなどに何が入っているのかです。また、3つ目(load、calc、print)にmainを4番目にしたいと思います。それをどうやってやりますか?助けてくれてありがとう。 –

+0

corinnasの回答が役立つはずです。あなたがこれをさらに理解するのを助ける必要があるかどうか私に知らせてください、悪いことを説明してください。 – Maddy

0

それが不必要に物事を吹くように、それは、コードのあなたの数行のために意味がありませんが、ここに行く:変数がの範囲内で定義されていること

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): 
    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+=profit_loss 
    return commission_paid_purchase, amount_paid, amount_sold, commission_paid_sale, profit_loss, totalpr 

def output(): 
    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')) 


if __name__ == "__main__": 
    #Initialization 
    name=0 
    count=0 
    totalpr=0.0 
    name=input("Enter stock name OR -999 to Quit: ") 
    while name!='-999': 
     count+=1 
     #Load 
     shares, pp, sp, commission = load() 
     #Calculations 
     commission_paid_purchase, amount_paid, amount_sold, commission_paid_sale, profit_loss, totalpr = calc(totalpr) 
     #Output 
     output() 
     name=input("\nEnter stock name OR -999 to Quit: ") 
print("Total Profit is $", format(totalpr, '10,.2f')) 

注意whileループは、そのループ内から呼び出された関数によって自動的に表示されます。

+0

"予期しないインデント"という行35のエラーが発生しました...すべてのエラー行をインデントしてみましたが、プログラムが失敗しました。 –

+0

申し訳ありませんが、今はうまくいくはずです。 – corinna

+0

ここでやっているようにグローバル変数を使用するのは本当に悪い考えです。 'calc'で使われるすべての値は' totalpr'だけでなく引数でなければなりません。 – Blckknght

関連する問題