Fehler drucken ein string: %d format: a number erforderlich ist, nicht str
Ich Plane eine Reise nach Disney World, die später in diesem Sommer, und ich habe versucht, ein Programm zu Berechnung der ungefähren Kosten der Reise für Spaß und um zu versuchen und halten mich vom aufstehen zu rostig. Mein problem ist, dass wenn ich versuche, um alle meine Werte berechnet, ich bekomme immer wieder den Fehler, dass in der überschrift steht. Mein code ist:
###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))
Ist, habe ich mich an die Vorschläge zu dieser Frage:Python-MySQLdb Probleme (TypeError: %d format: a number erforderlich ist, nicht str) und ich habe versucht, die änderungen angegeben, aber Sie waren nicht von mir geholfen. Ich kann individuell drucken jeden Wert, Prima, aber wenn ich versuche, drucken Sie alle in diesem großen block von text, den ich dann bekommen, mein Fehler. Ich würde schätzen jede Einsicht jedermann zu bieten hat.
Das ist nicht ein docstring.
Wenn Sie haben so viele Formatbezeichner, dass Sie nicht passen alle Argumente, die in einem einzigen 80-Zeichen-Zeile auch mit den Räumen entfernt, es ist Zeit zu beginnen, mit Namen Formatbezeichner und übergeben eine dict.
InformationsquelleAutor John | 2015-05-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wahrscheinlich der Fehler wird verursacht durch eine der
%i
Formatierungen. Zum Beispiel, den folgenden code:Dann kommt wieder der gleiche Fehler:
TypeError: %d format: a number is required, not str
.InformationsquelleAutor Raymond Jun Zhao
Gibt es eine Menge Dinge, die Sie verbessern können, in diesem code (auch die Kommentare Lesen!).
Ändern Sie den Variablentyp entsprechend zu dem, was Sie drucken möchten:
InformationsquelleAutor moser
Während Ihre Funktion, es ist eher anfällig für die Vermischung der vielen
Argumente. Dies ist eine verbesserte version. Ich habe nur Teil des Textes, aber der rest sollte einfach sein:
Diese Drucke:
Ich den vorgegebenen text die in einer Vorlage außerhalb der Funktion. Sie könnten selbst definieren, es eine extra-Datei und Lesen Sie diese Datei. Mit einem Wörterbuch
data
helfen können, um Ihre Daten zu organisieren. Ich verwendet die neuereformat()
- Methode für strings. Dies ermöglicht die Verwendung der{}
syntax für Ihre Platzhalter. Sie brauchen nicht zu definieren Formate für strings und zahlen so lange, wie Sie nicht wollen, dass Sie angezeigt in besonderer Weise im Hinblick auf Ihre position oder so. Das format für Schwimmer angegeben werden können, die Verwendung dieser syntax{room_cost:4.2f}
. Dies gibt Ihnen zwei Nachkommastellen und einer Gesamtbreite von nur vier wie bei der alten%
-Formatierung. Schließlich habe ich verwendet**
imformat()
Methode. Dies ist äquivalent zu schreibentemplate.format(days=3, nights=2, ...)
außer, dass nicht alle wiederholen die Einträge aus dem Wörterbuchdata
.InformationsquelleAutor Mike Müller