Das Programm soll zwei Namen annehmen, und wenn sie die gleiche Länge haben, sollte es prüfen, ob sie das gleiche Wort sind. Wenn es das gleiche Wort ist, wird "Die Namen sind die gleichen" gedruckt . Wenn sie gleich lang sind, aber unterschiedliche Buchstaben haben, wird "Die Namen sind unterschiedlich, aber gleich lang" ausgegeben . Der Teil, mit dem ich ein Problem habe, befindet sich in den unteren 4 Zeilen.
#!/usr/bin/env python
# Enter your code for "What's In (The Length Of) A Name?" here.
name1 = input("Enter name 1: ")
name2 = input("Enter name 2: ")
len(name1)
len(name2)
if len(name1) == len(name2):
if name1 == name2:
print ("The names are the same")
else:
print ("The names are different, but are the same length")
if len(name1) > len(name2):
print ("'{0}' is longer than '{1}'"% name1, name2)
elif len(name1) < len(name2):
print ("'{0}'is longer than '{1}'"% name2, name1)
Wenn ich diesen Code ausführe, wird Folgendes angezeigt:
Traceback (most recent call last):
File "program.py", line 13, in <module>
print ("'{0}' is longer than '{1}'"% name1, name2)
TypeError: not all arguments converted during string formatting
Anregungen werden sehr geschätzt.
quelle
f"'It will cost ${your_variable} dollars."
Der Fehler liegt in Ihrer Zeichenfolgenformatierung.
Die korrekte Verwendung der herkömmlichen Zeichenfolgenformatierung mit dem Operator '%' ist die Verwendung einer Zeichenfolge im Printf-Format (Python-Dokumentation hierzu hier: http://docs.python.org/2/library/string.html#format- String-Syntax ):
Der Operator '%' wird jedoch wahrscheinlich in Zukunft veraltet sein . Die neue Vorgehensweise nach PEP 3101 sieht folgendermaßen aus:
quelle
{}
. Und plötzlich bringt 3.5 PEP 461:%
Formatierung für Bytes . Das lässt mich denken, dass die%
Überreste noch lange auf sich warten lassen.%
ist prägnanter. Ich bin froh, dass es bei uns bleibt."'%s' is longer than '%s'" % (name1, name2)
prägnanter ist alsf"'{name1}' is longer than '{name2}'"
Für mich wurde dieser Fehler verursacht, als ich versuchte, ein Tupel an die String-Format-Methode zu übergeben.
Ich habe die Lösung aus dieser Frage / Antwort gefunden
Kopieren und Einfügen der richtigen Antwort aus dem Link (NICHT MEINE ARBEIT) :
quelle
print("this is a tuple: %s" % str(thetuple))
oderprint("this is a tuple: %s" % repr(thetuple))
In meinem Fall liegt es daran, dass ich nur eine einzige
%s
Eingabe für fehlende Werte benötige .quelle
Zusätzlich zu den beiden anderen Antworten denke ich, dass die Einrückungen auch in den letzten beiden Bedingungen falsch sind. Die Bedingungen sind, dass ein Name länger als der andere ist und sie mit 'elif' und ohne Einrückungen beginnen müssen. Wenn Sie es in die erste Bedingung einfügen (indem Sie ihm vier Einrückungen vom Rand geben), wird es widersprüchlich, da die Länge der Namen nicht gleichzeitig gleich und unterschiedlich sein kann.
quelle
Es gibt eine Kombination von Problemen, auf die in einigen anderen Antworten hingewiesen wird.
Ich habe sowohl das Beispiel für .format als auch die Übergabe von Tupeln an den Argumentspezifizierer von% s angegeben. In beiden Fällen wurde die Einrückung so korrigiert, dass sie größer / kleiner als die Überprüfungen sind, wenn die Länge übereinstimmt. Außerdem wurden nachfolgende if-Anweisungen in elif geändert, sodass sie nur ausgeführt werden, wenn die vorherige Anweisung auf derselben Ebene False war.
String-Formatierung mit .format
String-Formatierung mit% s und einem Tupel
quelle
In Python 3.7 und höher gibt es einen neuen und einfachen Weg. Hier ist die Syntax:
Ausgabe:
quelle
Da ich viele Werte in einem einzigen Druckaufruf gespeichert habe, bestand die Lösung darin, eine separate Variable zu erstellen, um die Daten als Tupel zu speichern und dann die Druckfunktion aufzurufen.
quelle
Ich stoße auch auf den Fehler,
Aber Listenargumente funktionieren gut.
Ich benutze mysqlclient python lib. Die Bibliothek scheint keine Tupelargumente zu akzeptieren. Das Übergeben von Listenargumenten
['arg1', 'arg2']
funktioniert.quelle
Django Raw SQL-Abfrage in Ansicht
quelle