如何在eval()结果中添加百分号?

时间:2019-03-21 01:43:08

标签: python-3.x

因此,我试图在输出的末尾插入一个百分号以表示可变汇率。但是,我收到“ TypeError:+不支持的操作数类型:'float'和'str'“错误。”如何格式化输出,以便可以在其上加上'%'符号。

Loan = eval(input("Enter loan amount, for example 120000: "))

while Loan <= 12000 or Loan >= 125000:
    print("Please enter a value more than 120000 or less than 125000")
    Loan = eval(input("Enter loan amount, for example 120000: "))
Year = eval(input("Enter number of years as an integer, for example 7: "))

while Year < 5 or Year >10:
    print("Please enter a number more than 5 or less than 10")
    Year = eval(input("Enter number of years as an integer, for example 7: "))

print('%-20s%-20s%-20s' % ('Interest Rate', 'Monthly Payment', 'Total Payment'))

Rate = 5.0
while Rate <= 8:
    adjRate = Rate / 1200
    monthlyPayment = Loan * adjRate / (1 - 1 / (1 + adjRate) ** (Year * 12))
    totalPayment = monthlyPayment * Year * 12
    print('%-20.3f%-20.2f%-20.2f' % (Rate, monthlyPayment, totalPayment))
    Rate += 0.125

我尝试过: print('%-20.3f%-20.2f%-20.2f' % (Rate+'%', monthlyPayment, totalPayment))

但是得到了

TypeError: unsupported operand type(s) for +: 'float' and 'str'"

3 个答案:

答案 0 :(得分:2)

由于Rate是浮点数,而'%'是str,因此表达式

Rate + '%'

确实是非法的:在Python中,您不能“添加”浮点数和str。

这就是您所查询的特定错误的原因。要解决此问题,您可以执行以下操作:

print('%20.3f%s%20.2f%20.2f' % (Rate, '%', monthlyPayment, totalPayment))

以便格式字符串中的%s为您提供%

我还删除了负号,因为数字通常应该右对齐。

如果您使用的是Python 3.6或更高版本,我强烈建议将其编写为:

print(f'{Rate:20.3f}%{monthlyPayment:20.2f}{totalPayment:20.2f'})

同样,这只是回答您错误的原因。 eval的使用实际上是另一回事。不应以您在此处使用的方式使用它。 (只是指出这一点,因为我有义务这样做。)

答案 1 :(得分:2)

永远不要对用户输入使用eval,不要使用输入并验证输入的内容;否则,这会打开很多安全漏洞。

请改用float()int()之类的转换命令。

例如,

loan_str = input("Enter loan amount")
loan_amt = int(loan_amt)

将所有内容都包裹在try / except中,以吸引人们输入“五万”而不是“ 50000”

这还将确保您的值是代码的正确类型。

要在字符串中嵌入“%”,请使用“ %%”

答案 2 :(得分:0)

只需使用print("what ever you want here", end = "%")