Wie ist dieser verbesserte Python Code zu Palindromen?
Verbesserter Code mit Hilfe der Antwort von alfredo153
#!/bin/python3
#Palindrome-Woerter in Textdatei erkennen
import string
#Funktion zum Erkennen von Palindromen
def check_palindrome(word):
reverse = ''
removable = string.punctuation + string.whitespace + string.digits
for c in removable: #Sonderzeichen entfernen
word = word.replace(c, '')
if word in string.punctuation or word in string.whitespace: #Sonderzeichen abfangen
return False
for c in word[::-1]: #Wort rueckwaerts zusammen basteln
reverse = reverse + c
if reverse.lower() == word.lower(): #Rueckwaerts-Wort mit vorwaerts-Wort vergleichen
return True
else:
return False
#Den Benutzer eine Textdatei oeffnen lassen
file = input('Path to file: ')
palindrome = []
try:
with open(file, 'r') as f:
lines = f.readlines()
except FileNotFoundError:
print('File not found!')
exit(0)
#Einzelne Woerter im Text der Funktion check_palindrome uebergeben
for line in lines:
line = line.split(' ')
for word in line:
if check_palindrome(word):
palindrome.append(word)
else:
continue
#Ergebnis anzeigen
print(len(palindrome), ' found!\n')
for i in range(len(palindrome)):
print(palindrome[i].replace('\n', '')) #\n in Wort entfernen, da sonst zu viele Leerzeichen bei Output
2 Antworten
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Computer, programmieren, Informatik
if word in string.punctuation or word in string.whitespace: #Sonderzeichen abfangen
return False
Ist das nciht redundant? Wenn DU bereits alle entsprechenden Zeichen mit replace eleminiert hast, dann lohnt es doch maximal noch auf leeren String zu testen ....
removable = string.punctuation + string.whitespace + string.digits
for c in removable: #Sonderzeichen entfernen
word = word.replace(c, '')
Das ließe sich auch mit str.translate erledigen.
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Computer, programmieren, Informatik
for c in word[::-1]: #Wort rueckwaerts zusammen basteln
reverse = reverse + c
if reverse.lower() == word.lower(): #Rueckwaerts-Wort mit vorwaerts-Wort vergleichen
return True
else:
return False
Doppelt gemoppelt...diese Zeilen sind verlustfrei reduzierbar auf:
return word.lower() == word[::-1].lower()
Und wie schon vorhin erwähnt - wozu das?
else:
continue
Genau else: continue kann man sich sparen. Eine if Teil muss ja nicht immer ein else haben.