打印字符串时出错:%d 格式:需要数字,而不是 str
Posted
技术标签:
【中文标题】打印字符串时出错:%d 格式:需要数字,而不是 str【英文标题】:Error printing a string: %d format: a number is required, not str 【发布时间】:2015-07-22 11:28:17 【问题描述】:我计划今年夏天晚些时候去迪斯尼世界旅行,我一直在尝试制定一个程序来计算旅行的大致费用以获取乐趣,并尽量避免让自己变得太生疏。我的问题是,当我尝试显示所有计算值时,我不断收到标题中的错误。我的代码是:
###Function to display costs
def Display(days, nights, building_type, person, room_cost,
room_cost_person, DisneyPark, Hopper, IslandPark,
IslandPTP, Island_parking, gas_cost, gas_cost_person,
park_person, Total_cost_person, mpg, gas, downpay):
print('''Cost of trip for a %i day/%i night stay in a %%s%%:
Number of people going: %i
Total room cost ($) %4.2f
Room cost/person ($) %4.2f
Price of Disney World tickets ($) %4.2f
Price of hopper ticket-Disney ($) %4.2f
Price of Universal ticket ($) %4.2f
Park-to-Park %%s%%
Cost to park at Universal/person ($) %4.2f
Total cost of gas ($) %4.2f
Cost of gas/person ($)* %4.2f
Cost to park/person ($) %4.2f
Cost of groceries/person ($)^ %4.2f
Cost to eat out/person ($)^# %4.2f
Souvenirs ($)^ %4.2f
Total cost of trip/person ($) %4.2f
*Factoring in round trip distance (1490 miles), mpg of %i, and average gas cost $%4.2f
#Covers eating out at night, eating in parks (butterbeer, etc), and eating while driving
^Note that these are estimates
%Note that the Villa housing requires a $%4.2f downpayment (refundable) that was not
included in cost calculations
----------------------------------------------------------------------------------------'''
%(day, night, Building, person, room_cost, room_cost_person, DisneyPark,
Hopper, IslandPark, IslandPTP, Island_parking, gas_cost, gas_cost_person,
park_person, Groceries, Eat, Souvenirs, Total_cost_person, mpg, gas,
downpay))
我已经查看了有关此问题的建议:Python mysqldb issues (TypeError: %d format: a number is required, not str),我尝试进行更改,但它们对我没有帮助。我可以单独打印每个值就好了,但是当我尝试在这个大文本块中打印它们时,我得到了我的错误。如果有人提供任何见解,我将不胜感激。
【问题讨论】:
如果您将其拆分为单独的行,这将容易得多,然后您可以找出问题所在。 这不是文档字符串。 如果你有太多的格式说明符,即使去掉空格也无法将所有参数放在一个 80 个字符的行中,那么是时候开始使用命名格式说明符并传递一个 dict . 【参考方案1】:虽然您的功能有效,但它很容易混淆许多 论据。这是一个改进的版本。我只使用了部分文本,其余的应该是直截了当的:
TEMPLATE = """
Cost of trip for a days day/nights night stay in a %building_type%:
Number of people going: person
Total room cost ($) room_cost:4.2f
Room cost/person ($) room_cost_person:4.2f
"""
data = 'days': 3, 'nights': 2, 'building_type': 'hotel',
'person': 4, 'room_cost': 80, 'room_cost_person': 20
def display_costs(data, template=TEMPLATE):
"""Show the costs in nicely readable format.
"""
print(template.format(**data))
display_costs(data)
打印出来:
Cost of trip for a 3 day/2 night stay in a %hotel%:
Number of people going: 4
Total room cost ($) 80.00
Room cost/person ($) 20.00
我在函数外部的模板中定义了文本。你甚至可以定义一个额外的文件并读取这个文件。使用字典data
可以帮助组织您的数据。我对字符串使用了较新的format()
方法。这允许您为占位符使用 语法。你不需要为字符串和整数定义格式,只要你不希望它们在位置等方面以特殊的方式显示。可以使用此语法
room_cost:4.2f
指定浮点数的格式。与旧的%
格式一样,这为您提供了两位小数和四位总宽度。最后,我在format()
方法中使用了**
。这相当于写template.format(days=3, nights=2, ...)
,只是不必重复字典data
中的所有条目。
【讨论】:
【参考方案2】:在这段代码中有很多可以改进的地方(阅读 cmets!)。
尝试根据您要打印的内容更改变量类型:
'Print string as %s, integers as %i ou %d, and float as %4.2f' % \
( '5', int('5'), int('5'), float('5') )
【讨论】:
【参考方案3】:错误可能是由%i
格式之一引起的。例如以下代码:
'this is %i' % '5'
这将返回相同的错误:TypeError: %d format: a number is required, not str
。
【讨论】:
以上是关于打印字符串时出错:%d 格式:需要数字,而不是 str的主要内容,如果未能解决你的问题,请参考以下文章