2014-06-28 45 views
2

当我运行下面的代码时,弹出以下消息框。为什么它在我不想要的地方打印那些恼人的大括号?我正在使用Python 2.7和EasyGui。为什么Python在这里打印大括号?

enter image description here

from __future__ import division 
from easygui import * 
import ystockquote 

def main(): 
    PRHSX_message() 

def PRHSX_message(): 
    prhsx_share_price = float(ystockquote.get_last_trade_price('PRHSX')) 
    prhsx_daily_change = ystockquote.get_change('PRHSX') 
    prhsx_total_shares = 47.527 
    prhsx_starting_value = 2500 
    prhsx_percent_change = (((prhsx_share_price * prhsx_total_shares)/prhsx_starting_value) - 1) * 100 
    prhsx_percent_change = str("%.2f" % prhsx_percent_change) + "%" 
    prhsx_current_value = prhsx_share_price * prhsx_total_shares 
    prhsx_profit = prhsx_current_value - prhsx_starting_value 
    prhsx_current_value = "$" + str("%.2f" % prhsx_current_value) 
    prhsx_profit = "$" + str("%.2f" % prhsx_profit) 
    prhsx_string = "T. Rowe Price Roth IRA Account\n____________________________\n \ 
       \nPercent Change:", str(prhsx_daily_change), \ 
       "\nShare Price:", prhsx_share_price, \ 
       "\nCurrent Value:", prhsx_current_value, \ 
       "\nPercent Growth:", prhsx_percent_change, \ 
       "\nProfit:", prhsx_profit 
    return msgbox(prhsx_string) 

if __name__ == '__main__': 
    main() 

回答

5

你传递一个元组,而不是一个字符串。使用string formatting这里减轻创建一个字符串:

def PRHSX_message(): 
    prhsx_share_price = float(ystockquote.get_last_trade_price('PRHSX')) 
    prhsx_daily_change = ystockquote.get_change('PRHSX') 
    prhsx_total_shares = 47.527 
    prhsx_starting_value = 2500 
    prhsx_percent_change = (((prhsx_share_price * prhsx_total_shares)/prhsx_starting_value) - 1) * 100 
    prhsx_current_value = prhsx_share_price * prhsx_total_shares 
    prhsx_profit = prhsx_current_value - prhsx_starting_value 

    prhsx_string = (
     "T. Rowe Price Roth IRA Account\n" 
     "____________________________\n\n" 
     "Percent Change: {}\n" 
     "Share Price: {}\n" 
     "Current Value: ${:.2f}\n" 
     "Percent Growth: {:.2f}%\n" 
     "Profit: ${:.2f}").format(
     prhsx_daily_change, prhsx_share_price, prhsx_current_value, 
     prhsx_percent_change, prhsx_profit) 

的浮点值的格式已被移动到字符串格式。

主要字符串由Python编译器连接,因为在各种字符串之间没有其他语句。

你也可以使用多线串三报价,但随后你的压痕可能看起来有点滑稽:

def PRHSX_message(): 
    prhsx_share_price = float(ystockquote.get_last_trade_price('PRHSX')) 
    prhsx_daily_change = ystockquote.get_change('PRHSX') 
    prhsx_total_shares = 47.527 
    prhsx_starting_value = 2500 
    prhsx_percent_change = (((prhsx_share_price * prhsx_total_shares)/prhsx_starting_value) - 1) * 100 
    prhsx_current_value = prhsx_share_price * prhsx_total_shares 
    prhsx_profit = prhsx_current_value - prhsx_starting_value 

    prhsx_string = """\ 
T. Rowe Price Roth IRA Account 
____________________________ 

Percent Change: {} 
Share Price: {} 
Current Value: ${:.2f} 
Percent Growth: {:.2f}% 
Profit: ${:.2f}""".format(
     prhsx_daily_change, prhsx_share_price, prhsx_current_value, 
     prhsx_percent_change, prhsx_profit) 

出于这个原因,我通常把格式字符串作为全局常量。

+0

你忘了.02的精度;) – ThiefMaster

+0

@ThiefMaster:我没有改变原来的任务;我现在已经做到了。 –

+0

啊。无论如何,现在你有'prhsx_current_value = prhsx_current_value'这似乎没有多大意义:p – ThiefMaster