2017-07-08 3 views
-2

Ich erstelle einen Hot Dog Simulator in Python, mit einer Klasse "HotDog".
Wenn ich die Zeichenfolge Formatierung, wenn es 2 Würzmittel sind, schrieb ich diesen Code an die Zeichenfolge hinzuzufügen:Warum verbraucht die Funktion strip() meinen Senf?

if len(self.condiments) == 2: 
    for i in self.condiments: 
     msg = msg + i + " and " 
    msg = msg.strip(" and ") 

Wenn die zweite Würze „Senf“ ist, wobei der Streifen() -Funktion nimmt die „d“ von Senf, so dass die Schnur druckt wie folgt entfernt:

Raw hot dog with ketchup and mustar. 

I trial and error verwendet habe weitere Informationen zu finden, und es scheint, „d“ ist der einzige Brief, der verschwindet, das heißt: Mustarg und Mustarb werden gut.
Auch scheint es das "a" von msg = msg.strip(" and ") zu sein, das das Problem verursacht.
Wenn ich nur "d" oder "nd" strippe, wird Senf in Ordnung sein.

+2

Das ist, was '.strip' [dokumentiert] (https://docs.python.org/3/library/stdtypes.html#str.strip) zu tun ist, ja. * "Das Argument chars ist kein Präfix oder Suffix; vielmehr werden alle Kombinationen seiner Werte entfernt" *. – jonrsharpe

+0

Wie wäre es mit ''und' .join (self.condiments)'? –

Antwort

1

Das ist die dokumentierte Funktion.

die Zeichen in der Zeichenfolge werden von den beiden Enden des Strings dieser Methode Sie

auf

So abgezogen werden, wenn zunächst a raw hotdog tun, dann würden Sie am Ende mit raw hotdog aufgerufen wird

Wie wäre es stattdessen verwendet man

" and ".join(condiments) 

Wenn ich nur "d" oder "nd" abziehe, wird Senf in Ordnung sein.

Aber Sie hätten eine a am Ende der Nachricht, nicht?

0

Die Methode strip funktioniert nicht so, wie Sie es erwarten. Sein Argument ist eine Folge von Zeichen, die entfernt werden, wenn sie in beliebiger Reihenfolge (und beliebig oft) an beiden Enden der Zeichenfolge angezeigt werden. Also, wenn Sie in übergeben, sagen Sie ihm, alle Leerzeichen, 'a', 'n' und 'd' Zeichen zu entfernen. Da die 'd' in 'mustard' eines dieser Zeichen ist, wird es entfernt, wenn es am Ende ist.

Eine bessere Möglichkeit, eine bestimmte Menge an Text vom Ende einer Zeichenkette zu entfernen, wäre, sie zu zerlegen: msg = msg[:-5] löscht die letzten fünf Zeichen.

Oder Sie können vermeiden, die zusätzliche in einer Vielzahl von Möglichkeiten, wie zum Beispiel str.format oder str.join (oder eine Kombination der beiden) zu erstellen.

+0

Oder 'msg = msg [: - len (" und ")]' –

Verwandte Themen