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?
Großbuchstaben finden
@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))
Alternative:
Code: Alles auswählen
text = 'Text mit Grossbuchstaben'
has_uppercase = any(c == c.upper() for c in text)
Mit upper werden Leerzeichen auch als Großbuchstaben erkannt, besser funktioniert es mit isupper:
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
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)
http://markush.cwsurf.de/joomla_17/inde ... mit-python
Dein Code besitzt aber auch einige Grausamkeiten, mal ein Beispiel:Malta hat geschrieben:...
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
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("?", " ")
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
@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))
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.
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.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Oder der Nutzung von String-Translate, was vermutlich effizienter ist als ne State-Machine für so eine einfache Aufgabe zu verwenden.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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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')
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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."""text analyse and display the analyse"""
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert