2016-04-28 3 views
1

Ich versuche, einen Algorithmus in Python 2.7.10, Benutzereingaben, teilt es und fügt Wörter in eine Liste, nimmt dann alle Wörter aus dieser Liste und druckt sie in eine bestimmte Art und Weise.Drucken Zeichenfolge mit mehreren Platzhalter Formatierern in Python 2.7

usr_input = raw_input(' > ') 

input = usr_input.split(' ') 

print "You think that the painting is:" 
print "%s" + ", %s" * len(input) + "." % (> ? <) 

Die Formatierer% s arbeiten als Platzhalter. Das Problem besteht darin, dass die Anzahl der Platzhalter, die als Teil der Zeichenfolge gedruckt werden, nicht fest ist, sondern gleich len(input) ist. Daher weiß ich nicht, wie man diesen Formatierern Werte zuweist. (Das ist die „> <?“ Teil innerhalb der Klammern.)

Hinweis:, da dies für die Zwecke Test nur, lassen Sie uns die Benutzer nur Strings übernehmen wird die Eingabe, keine ganzen Zahlen, etc., so dass Der% r-Formatierer ist nicht erforderlich.

Die gewünschte Ausgabe sollte wie folgt aussehen etwas:

> nice pretty funny 
You think that the painting is: 
nice, pretty, funny. 

Ich weiß, dass dies erreicht werden kann, die str.join(str) Methode aber ist es eine Möglichkeit, es zu tun, wie ich oben erklärt? Vielen Dank.

+0

@Anshu Kumar Vielen Dank allen für Ihren Beitrag, Anshu Kumar gelungen, das Problem zu lösen. –

Antwort

0

Verwenden print ("%s" + ", %s" * (len(input) - 1) + ".") % tuple(input)

jedoch IMO ', '.join(input) + '.' besser ist :)

+0

Danke! Das hat das Problem gelöst. Nur aus Neugier, (ich bin neu in Python) Warum denkst du, '.join (str)' Methode ist hier besser zu verwenden? (Ist es besser, es generell über 'str + str' zu verwenden, um Strings zu kombinieren?) –

+0

Mehr Python und generell schneller. –

0

können Sie tun, was Sie tun dies wollen:

print ",".join(["%s"] * len(input)) % tuple(input) 

Grundsätzlich bauen Ihre Kette von "%s, " ... und die Eingabe als eine Liste mit den String Formatierer übergeben. Du kannst es genauso machen, wie du es geschrieben hast, gib einfach deine Liste weiter.

print "%s" + ", %s" * len(input)) + "." % tuple(input) 
+0

Hallo, danke für die Antwort, aber ich habe versucht, es die Liste zu übergeben, und ich bekomme Folgendes: 'TypeError: nicht genug Argumente für Formatzeichenfolge'. Der erste Code, den Sie anhängen, gibt auch zurück: 'TypeError: nicht unterstützte Operandentyp (en) für%: 'list' und 'list'' und der zweite nur'% s, & s, & s,% s. Ich suche, um herauszufinden, ob es einen Weg gibt, es ohne die '.join (str)' Methode zu tun. –

+0

Richtig, tut mir leid. Bearbeitete meine Antwort - ich hatte einen hängenden Klammerfehler. – mprat

+0

Egal, danke für die Idee. –

0

Sie sollten ein Tupel nach "%" verwenden. Beachten Sie, dass Sie bereits das erste Wort im Ausdruck berücksichtigt haben, so dass len (input) -1 Wörter geschrieben werden müssen.

usr_input = raw_input(' > ') 

input = usr_input.split(' ') 

output = "%s" + ", %s" * (len(input) - 1) + "." 
print "You think that the painting is:" 
print output % tuple(input) 
+0

Hallo, danke für das Konzept, die Eingabe in ein Tupel zu konvertieren wird wahrscheinlich den Trick machen. Obwohl ich nach der Eingabe einiger Argumente einen Fehler beim Ausführen des Codes erhalte. Hier ist, was ich rede: '> a Sie denken, dass das Gemälde ist: Drucken"% s "+",% s "* (len (Eingabe) - 1) +". " % tuple (input) TypeError: Nicht alle Argumente wurden während der Zeichenfolgenformatierung konvertiert. –

+0

Die Formatierung hat Vorrang vor der Verkettung und damit den Fehler. –

+0

Danke euch beiden. Ich habe es behoben. – lev