2016-04-06 1 views
0
のループ合併症
def main(): 
    totalprofit = 0 
    stockname = input("Enter the name of the stock or -999 to quit: ") 
    while stockname != "-999": 
     sharesbought, purchasingprice, sellingprice, brokercommission = load() 
     amountpaid, amountofpaidcommission, amountstocksoldfor, amountofsoldcommission, profitorloss = calc(sharesbought, purchasingprice, sellingprice, brokercommission) 
     output(stockname, amountpaid, amountofpaidcommission, amountstocksoldfor, amountofpaidcommission, profitorloss) 
     stockname = input("Enter the name of the next stock (or -999 to quit): ") 

     totalprofit += profitorloss 
    print("\n Total profit is: ", format(totalprofit, '.2f')) 

def load(): 
    sharesbought = int(input("Number of shares bought: ")) 
    purchasingprice = float(input("Purchasing price: ")) 
    sellingprice = float(input("Selling price: ")) 
    brokercommission = float(input("Broker commission: ")) 
    return sharesbought, purchasingprice, sellingprice, brokercommission 

def calc(sharesbought, purchasingprice, sellingprice, brokercommission): 
    amountpaid = sharesbought * purchasingprice 
    amountofpaidcommission = amountpaid * (brokercommission/100) 
    amountstocksoldfor = sharesbought * sellingprice 
    amountofsoldcommission = amountstocksoldfor * (brokercommission/100) 
    profitorloss = (amountpaid + amountofpaidcommission) - (amountstocksoldfor - amountofsoldcommission) 
    return amountpaid, amountofpaidcommission, amountstocksoldfor, amountofsoldcommission, profitorloss 

def output(stockname, amountpaid, amountofpaidcommission, amountstocksoldfor, amountofsoldcommission, profitorloss,): 
    print("\n Stock name: ", stockname, sep = '') 
    print("Amount paid for the stock: ", format(amountpaid, '.2f')) 
    print("Commission paid to broker when the stock was bought: ", format(amountofpaidcommission, '.2f')) 
    print("Amount the stock sold for: ", format(amountstocksoldfor, '.2f')) 
    print("Commission paid to broker when the stock was sold: ", format(amountofsoldcommission, '.2f')) 
    print("Profit or loss: ", format(profitorloss, '.2f')) 

main() 

ながら:機能と最初の関数の目的は、ユーザが決定するまで、彼女または彼が望んでいるように何回が行われているように、入力に以下のことをユーザーを許可するようであるPythonの

  1. 証券名前
  2. 株式は
  3. 販売価格
  4. ブローカー手数料
を買いました

私の主な問題は、主な機能です。私はwhileループを正しく使用しているのかどうか、まったく正しいのかどうか懐疑的です。私はプログラムを実行しようとしましたが、何も出力されません。

def main() 
    load() 
    calc() 
    output() 

それともwhileループの中に細かいです:

はまた、私は上記のすべての機能を呼び出すために、入力された値を使用してプログラムの最後にこれを追加するべきではないのですか?

+0

コードの最下部に 'main()'を追加します – Keatinge

+0

while条件で 'stockname'をチェックしますが、ユーザーはwhileループの前に*入力することしかできません。決して後は、 'ストックネーム'が設定されると、それは永遠にそのままになります。新しい 'ストックネーム'のために、whileの最下位にいるユーザに尋ねたいかもしれません。 – Evert

+0

また、18行目で 'brokercommission'を使用するときに' brokercommision'を使います(行方不明) – Keatinge

答えて

0

私はwhileというループは完全に適切であり、何回かの条件が満たされていないときに停止し、不定期の回数だけループしたいと考えています。

1つの明白な問題は、この行に、あります:

stockname +=1 

これはどんな意味がありません。 stocknameは文字列なので、追加することはできません。代わりに、次の株価(または完了したことを知らせるための「特別な値」)をユーザーに求める必要があります。その行を次のように置き換えてみてください。

stockname = input("Enter the name of the next stock (or -999 to quit): ") 

残りのコードは、冗長であれば正しく表示されます。コード内の他の場所で他の関数の一部を呼び出す可能性が高いと思わない限り、すべてのロジックを1つの関数に含める方が簡単ですっきりしているかもしれません。関数はうまくいきますが、コードの各部分を独自の関数で分離する利点と、それらの間で多くの値を渡す努力とのバランスを取る必要があります。

関連する問題

 関連する問題