Почему Python печатает фигурные скобки здесь?

Когда я запускаю приведенный ниже код, появляется следующее сообщение. Почему он печатает эти раздражающие скобки там, где я их не хочу? Я использую Python 2.7 и EasyGui.

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()

1 ответ

Решение

Вы передаете в кортеже, а не в строке. Используйте форматирование строки здесь, чтобы упростить создание строки:

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)

По этой причине я обычно помещаю строку формата в качестве глобальной константы.

Другие вопросы по тегам