2016-05-18 4 views
1

Ich habe einen Antwort-Validierungscode zur Verwendung in einem Programm zur Fehlerbehebung erstellt. Ich habe die offensichtlichen Validatoren für Zahlenantworten verwendet (mit der try/except-Methode), habe aber jetzt auch Ja/Nein-Fragen. Ich habe den Internet- und Stack-Austausch durchforstet und eine Methode gefunden, die ganze Zahlen aus der Antwort entfernt (nicht nur die am Rand einer Antwort wie .strip()). Es verwendet die Methode beitreten:Erklären Sie mir, wie .join() in Python funktioniert

while True: 
    a = input("Yes or No? ").lower() 
    a = ''.join(c for c in a if c.isalpha()) 
    if a == "y" or a == "yes": 
     print("You inputted Yes!") 
     break 
    elif a == "n" or a == "no": 
     print("You inputted No!") 
     break 
    else: 
     print("Please input a valid option!") 

Also, wenn der Benutzer ‚Y312eS2‘ eingegeben wird, dann wäre es, dass als ‚Ja‘ Antwort akzeptieren. Ich möchte wissen, wie es funktioniert, weil ich es erklären muss und alle Beispiele von .join() im Internet dieses Mal nicht verwenden.

Kann mir jemand helfen?

+0

Was genau ist Ihre Frage? Wie funktioniert 'join()'? Es ist das gleiche wie String-Verkettung mit '+' ... – Idos

Antwort

2
c for c in a if c.isalpha() 

iteriert über alle Zeichen in a und liefert nur diejenigen, die Alpha sind aber nicht numerisch (c.isalpha() is True)

''.join(['A', 'B', 'C']) 

concatenates the list of characters einem String ohne Trenn:

ABC 
+0

Vielen Dank, ich verstand, dass es die Zeichenfolge verkettet, aber nicht wusste, dass es über alle Zeichen und nur die Alpha-Zeichen zurückschaltet, danke :)) –

+0

Nur eine kleine Note, 'isalpha()' gibt False für eine Ganzzahl-Zeichenkette ('1', '2' usw.) zurück, so dass die Anweisung 'über alle Zeichen in a iteriert und nur diejenigen ergibt, die alphanumerisch sind sollte geändert werden, um "iteriert über alle Zeichen in a und ergibt nur diejenigen, die Buchstaben sind". Es gibt eine andere Methode für alphanumerische '.isalnum()' – DeepSpace

0

Sie haben a str.join() method. Diese Methode stellt einfach alle Werte im iterable Argumente (die Strings sein muss) zusammen in eine neue Zeichenfolge mit dem String-Objekt, auf den Sie es als Schreiner genannt:

>>> ' - '.join(['foo', 'bar', 'baz']) 
'foo - bar - baz' 
>>> ', '.join(['spam', 'eggs', 'ham']) 
'spam - eggs - ham' 

In Ihrem Beispiel der leer Zeichenfolge '' verwendet wird, so gibt es nichts, um die Saiten Trenn verbunden sind:

>>> ''.join(['Py', 'thon']) 
'Python' 

die Eingabe in das Verfahren ein generator expression:

(c for c in a if c.isalpha()) 

Dies gibt einfach alle Zeichen von a an die str.join()-Methode weiter, wenn sie Buchstaben sind; str.isalpha() gibt nur wahr ist, dann, und nicht für Zahlen oder Leerzeichen oder jede andere Art von Charakter:

>>> '1'.isalpha() 
False 
>>> 'c'.isalpha() 
True 

So ''.join(c for c in a if c.isalpha()) verbindet alle Zeichen aus c, die Buchstaben in eine neue Zeichenfolge sind, herausgefiltert werden effektiv etwas anderes.

0

.join() Es hat nichts zu tun mit dem Entfernen bestimmter Zeichen aus einer Zeichenfolge oder der Validierung von irgendetwas.

.join() nimmt einfach die Zeichenfolge, dass es auf ('x' bei 'x'.join()) genannt wurde, concats es zu jeder Zeichenfolge in dem iterable es als Parameter bekam und gibt das Ganze als eine einzelne Zeichenfolge.

Zum Beispiel:

'*'.join(['1', '2']) 
>> '1*2' 

Im Beispiel im Code wurde eine bedingte Anweisung zum iterable hinzugefügt, die zu .join() übergeben wurden, so wäre es nur die Saiten nehmen, die Buchstaben sind.

Verwandte Themen