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
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
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.