在一个确定的循环中python字符串格式化错误

时间:2015-11-09 00:35:33

标签: python string-formatting

def main():
    #Get amount of principal, apr, and # of years from user
    princ = eval(input("Please enter the amount of principal in dollars "))
    apr = eval(input("Please enter the annual interest rate percentage "))
    years = eval(input("Please enter the number of years to maturity "))

    #Convert apr to a decimal
    decapr = apr / 100

    #Use definite loop to calculate future value
    for i in range(years):
        princ = princ * (1 + decapr)
        print('{0:5d} {0:5d}'.format(years, princ))

我试图在表格中打印年份和主要值,但是当我打印出来的所有内容都是两列10列。

1 个答案:

答案 0 :(得分:2)

所以你有几个问题。第一个问题是显示问题。

您的输出语句print('{0:5d} {0:5d}'.format(years, princ))有几个问题。

  1. 打印年代替i,因此它总是相同的值而不是递增
  2. 格式声明0中的{0:5d}表示以下值中的第0个元素,因此您实际打印两年,第二个应该是{{ 1}}而不是1
  3. 您正在使用0来打印应该是浮点值的内容,d是用于打印整数,您应该使用d的内容,这意味着"用2位小数打印这个数字
  4. 一旦你纠正了那些,你仍然会因为一个更微妙的问题而看到错误的答案。您使用整数值而不是浮点数执行除法,这意味着任何小数余数都会被截断,因此对于任何合理的apr,{1:.2f}将评估为0。

    您可以通过更正输入来解决此问题。 (作为旁注,在用户输入上运行eval通常是一个非常危险的想法,因为它将执行输入的任何代码。)而不是eval,使用apr / 100float来指定什么类型的值应将输入转换为。

    以下是实施上述修正的更正代码。

    int