-2

好吧,我是 python 新手,我正在学校为此上课,对此我有点困惑。我们正在编写一个程序/脚本来计算买卖股票的交易,由于某种原因,我无法让“余额”变量随着时间的推移而累积,并从买卖股票中减去和添加。这是代码。任何输入都会很棒^.^

def main():

    #Below is the variables used in the context

    balance = float(input("Starting cash amount? "))
    numtrades = int(input("Number of trades for today?"))
    print('You do not own any shares, but have', balance, 'in cash')
    buy = 0
    sell = 0
    price_per_share = 0
    transaction_amount = 0
    transaction_amount_buy = 0
    transaction_amount_sell = 0


    #Below is the prompt for the first transaction, which requires a buy

    num_shares = int(input('Number of shares to buy?'))
    price_per_share = float(input('Price per share?'))
    print(num_shares, "shares for $",price_per_share, "per share cost $",price_per_share * num_shares)
    buy = buy + num_shares
    transaction_amount_buy = transaction_amount_buy + (num_shares * price_per_share)
    print("Currently holding", buy, "and have $", balance - transaction_amount_buy , "in cash")


    if balance < transaction_amount :

            print('You do not have sufficient funds to purchase', num_shares, 'for $', price_per_share, 'per share.')
            print('Your current balance is', balance, ', but', num_shares,' x ', price_per_share,' = ', num_shares * price_per_share)
            print("Currently holding", buy, "and have $", balance - transaction_amount , "in cash")




    #Below is the loop counter for each trade, along with if statements for buy/sell


    for i in range(numtrades):
        print('Trade number', (i + 2), end = "")
        action = input(' (buy/sell)?')
        if action == 'buy':
            num_shares = int(input('Number of shares to buy?'))
        if action == 'sell':
            num_shares = int(input('Number of shares to sell?'))
        price_per_share = float(input('Price per share?'))
        print('Transaction', (i+2))
        print('Transaction type is', action)


        if action == 'buy':
            print(num_shares, "shares for $",price_per_share, "per share cost $",price_per_share * num_shares)
            buy = buy + num_shares
            transaction_amount_buy = transaction_amount_buy + (num_shares * price_per_share)

        if action == 'sell':
            print(num_shares, 'shares for $',price_per_share, 'per share worth $',price_per_share * num_shares)
            sell = sell + num_shares
            transaction_amount_sell = transaction_amount_sell + (num_shares * price_per_share)

        transaction_amount = transaction_amount_buy - transaction_amount_sell

        if balance < transaction_amount :

            print('You do not have sufficient funds to purchase', num_shares, 'for $', price_per_share, 'per share.')
            print('Your current balance is', balance - transaction_amount, ', but', num_shares,' x ', price_per_share,' = ', num_shares * price_per_share)
            print("Currently holding", buy, "and have $", balance - transaction_amount , "in cash")


        if balance > transaction_amount :
            print("Currently holding", buy, "and have $", balance - transaction_amount , "in cash")

 main()
4

3 回答 3

7

您打印差异,balance - transaction_amount但您从未将此值设置为balance变量。几乎,您正在做的事情与以下内容相同:

>>> cupcakes = 5
>>> print("I ate one cupcake, now I have", cupcakes - 1, "cupcakes")
I ate one cupcake, now I have 4 cupcakes
>>> print(cupcakes)
5 # We never modified the variable cupcakes

在你的打印语句之前,做balance = balance - transaction_amount(或balance -= transaction_amount),然后在打印函数中放balance.

于 2013-09-19T02:13:40.910 回答
1
transaction_amount_buy = transaction_amount_buy + (num_shares * price_per_share)
balance = balance - transaction_amount_buy
print("Currently holding", buy, "and have $", balance , "in cash")

这应该让第一部分工作,现在其余的应该遵循......

于 2013-09-19T03:31:54.927 回答
1

我建议您将此问题分解为一系列较小的问题。通过创建仅处理较小问题的函数来做到这一点。在尝试将它们全部连接到 main.

示例:您有余额,无论您是否购买了某些东西。您选择购买或出售。你买什么或卖什么?如果你卖,你拥有它吗?如果没有,可以吗?出售(卖空)您不拥有的东西是否有所不同。

所以保持简单,开始。假设您只是买卖香蕉。买100根香蕉和卖100根香蕉有区别吗?如果您处理购买大于 0 的数字而出售小于零的数字,则并非如此。

所以你有(现金)余额。当您“购买”时,您将返还成本。余额应按成本递减。如果您出售,余额应增加成本。

嗯..你能卖掉你不拥有的东西吗?似乎您不仅需要跟踪您的余额,还需要跟踪您在买卖商品中的“头寸”。

如果你不能卖得比你拥有的多,或者买的香蕉价格比你的余额高,你需要有一种方法来处理这些问题。

于 2013-09-19T03:40:45.963 回答