Seite 1 von 1
Großbuchstaben finden
Verfasst: Donnerstag 19. Dezember 2013, 17:02
von Malte73
Hey Leute,
ich möchte mit find() herausfinden, ob es Großbuchstaben in einem Text gibt. Was muss ich in die Klammern schreiben, damit es funktioniert?
Re: Großbuchstaben finden
Verfasst: Donnerstag 19. Dezember 2013, 17:09
von Sirius3
@Malte73: mit "find" kannst Du nicht herausfinden ob es Großbuchstaben in einem Text gibt. Warum willst Du dafür "find" verwenden?
Code: Alles auswählen
import string
text = "Text mit Grossbuchstaben"
has_uppercase = bool(set(string.uppercase) & set(text))
Re: Großbuchstaben finden
Verfasst: Donnerstag 19. Dezember 2013, 17:31
von Malte73
Ich habe es ausprobiert, da kam die Fehlermeldung: "can't assign to function call"
Re: Großbuchstaben finden
Verfasst: Donnerstag 19. Dezember 2013, 17:40
von Sirius3
@Malte73: Was auch immer Du ausprobiert hast, meine drei Zeilen waren es jedenfalls nicht, da beide Assignments auf Namen stattfinden und nicht auf Funktionsaufrufe.
Re: Großbuchstaben finden
Verfasst: Donnerstag 19. Dezember 2013, 17:55
von BlackJack
Alternative:
Code: Alles auswählen
text = 'Text mit Grossbuchstaben'
has_uppercase = any(c == c.upper() for c in text)
Re: Großbuchstaben finden
Verfasst: Donnerstag 19. Dezember 2013, 20:35
von Malta
Mit upper werden Leerzeichen auch als Großbuchstaben erkannt, besser funktioniert es mit isupper:
Code: Alles auswählen
text = 'Text mit Grossbuchstaben'
has_uppercase = any(c.isupper() for c in text)
sum_of_uppercase = sum(c.isupper() for c in text)
Habe diese Anregung auch in mein Wörterzählprogramm aufgenommen und lasse jetzt die Anzahl der Großbuchstaben damit anzeigen:
http://markush.cwsurf.de/joomla_17/inde ... mit-python
Re: Großbuchstaben finden
Verfasst: Freitag 20. Dezember 2013, 11:27
von darktrym
Dein Code besitzt aber auch einige Grausamkeiten, mal ein Beispiel:
Code: Alles auswählen
eingabe = eingabe.replace(",", " ")
eingabe = eingabe.replace(".", " ")
eingabe = eingabe.replace("-", " ")
eingabe = eingabe.replace(";", " ")
eingabe = eingabe.replace(":", " ")
eingabe = eingabe.replace("!", " ")
eingabe = eingabe.replace("?", " ")
Du gehst 7x durch die Eingabe!
Oder das hier, würde kein Python Programmierer so machen.
Code: Alles auswählen
def contains(numbers, value):
for n in numbers:
if n == value:
return True
return False
nums = [1, 2, 3, 7, 13, -2, 4, 8, 9]
result = contains(nums, 7)
print result # True
Re: Großbuchstaben finden
Verfasst: Freitag 20. Dezember 2013, 11:43
von Sirius3
@darktrym: wenn das schon eine Grausamkeit ist, was ist dann das Wörterzählen??
Code: Alles auswählen
import re
from collections import Counter
words = re.split('[-.,!\s]+', eingabe)
word_counts = Counter(words)
index = ''.join('{} x {}\n'.format(word_counts[word], word) for word in sorted(word_counts))
Re: Großbuchstaben finden
Verfasst: Freitag 20. Dezember 2013, 12:45
von snafu
Vielleicht solltet ihr auch sagen, was Malta besser machen kann...
Die Alternative für aufeinanderfolgende ``str.replace()``-Aufrufe wäre wohl die Verwendung eines entsprechenden Ausdrucks für ``re.sub()``, damit man das in einem Rutsch erledigen kann.
Die Alternative zu einer selbstgeschriebenen ``contains()``-Funktion ist natürlich die Nutzung des in Python eingebauten ``in``-Operators.
@Sirius3: Worauf genau bezieht sich dein Einwand? Auf ``index``? Gut, das könnte man etwas kompakter schreiben. Mehr sehe ich da jetzt nicht.
Re: Großbuchstaben finden
Verfasst: Freitag 20. Dezember 2013, 16:19
von Leonidas
snafu hat geschrieben:Die Alternative für aufeinanderfolgende ``str.replace()``-Aufrufe wäre wohl die Verwendung eines entsprechenden Ausdrucks für ``re.sub()``, damit man das in einem Rutsch erledigen kann.
Oder der Nutzung von String-Translate, was vermutlich effizienter ist als ne State-Machine für so eine einfache Aufgabe zu verwenden.
Re: Großbuchstaben finden
Verfasst: Freitag 20. Dezember 2013, 23:42
von Malta
Danke für euere Tipps insbesondere Sirius3, ich habe die Funktion wie folgt umgeschrieben:
Code: Alles auswählen
"""text analyse and display the analyse"""
words = re.split('[-.,!\s]+',
self.text.get(1.0, 'end').title()[:-1])
self.wliste.config(state='normal')
self.windex.config(state='normal')
self.wliste.delete(1.0, 'end')
self.windex.delete(1.0, 'end')
word_counts = Counter(words)
liste = "\n".join(words)
liste += "\n\n Alphabetisch sortiert:\n"
liste += "\n".join(sorted(words))
index = ''.join('{} x {}\n'.format(word_counts[word], word)
for word in sorted(word_counts))
if words != ['']:
self.wliste.insert('end', liste)
self.windex.insert('end', index)
self.lab["text"] = ("Der Text besteht aus {} Zeichen "
"und aus {} Wörtern und enthält {} Großbuchstaben"
.format(sum(c.isalpha() for c in self.text.get(1.0, 'end')),
len(words), sum(c.isupper() for c in self.text.get(1.0, 'end'))))
else:
self.lab["text"] = "Kein Text vorhanden"
self.windex.config(state='disabled')
self.wliste.config(state='disabled')
Re: Großbuchstaben finden
Verfasst: Montag 23. Dezember 2013, 10:25
von Hyperion
"""text analyse and display the analyse"""
Das sind ja gleich zwei Sachen auf einmal... das würde ich trennen und die Analyse-Ergebnisse in einer geeigneten Struktur unterbringen. In einer separaten Funktion kannst Du dann eine hübsch formatierte Ausgabe realisieren. In letzterer würde ich dann auch auf die Templating-Möglichkeiten von Python zurückgreifen und nicht so viel mittels ``+`` konkatenieren.