2016-11-28 1 views
-1

Ich bin neu bei Python und möchte im Moment durch eine Zeichenfolge nach Zahlen und Sonderzeichen filtern, was ich benutze, druckt Ja (wenn Zahlen oder Sonderzeichen vorhanden sind) und Nein (denn wenn es keine solche Zeichen) Hier ist, was ich im Moment verwenden:Filtern nach Zeichenfolgen für bestimmte Zeichen

name_letters="123456789/*-.,`~<>?\:;[email protected]#$%^&*()-_=+{}[]" 
name= '123456' 
def check_letters (text,char): 

    count= 0 
    for char in name: 
    let= text[count] 
    if name_letters== let: 
     print('Yes') 
    else: 
     print("No") 
    count+=1 

for char in name_letters: 
    check_letters(name,name_letters) 

die Probleme, die auftreten, sind:

  1. Nachdem das Spiel mit den Variablen immer nur gibt entweder Ja oder Nein, keine Variation der beiden

  2. Dies ist kein großes Problem, aber die Schleife läuft länger, als es zu

    braucht
+0

' == 'ist der" gleich "Operator. In Ihrem Fall vergleichen Sie also in der ersten Schleife '123456789/* -.,' '~ <>? \:;! @ # $%^& *() -_ = + {} [] == 1'. Mit stimmt natürlich nicht überein, weil es nicht das Gleiche ist. – manuzi1

Antwort

0

Ich denke Filter nicht das Wort ist für Sie suchen, sondern eher eine Überprüfung, ob es existiert. Sie können also die Funktion built-in any() verwenden, um festzustellen, ob ein Zeichen in der Zeichenfolge übereinstimmt.

die Verwendung in Betreiber können Sie überprüfen, ob ein einzelnes Zeichen innerhalb der Zeichenfolge vorhanden ist:

'$' in string  # found 
'$' not in string # not found 

Ein pythonic Weg, dies in Ihrem Code umgehen würde wie folgt aussehen:

#Returns boolean True/False if any character exists in string 
def check_letters(string, characters): 
    charset = set(characters) 
    return any((c in charset) for c in string) 

print "Yes" if check_letters(name, name_letters) else "No" 
Verwandte Themen