Seite 1 von 2

Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 11:27
von phythonkid
Hallo,
ich nehme gerade in der Schule das Thema Phython durch und habe mich da etwas ausprobiert, sodas ich die Grundlagen jetzt kann... Ich muss aber nun ein Programm programmieren, wo jeder zweite Buchstabe eines kurzen Textes groß geschrieben wird und der rest klein.
Es wäre toll wenn jemand mir dabei helfen könnte oder einen Ansatz sagen könnte!
Liebe Grüße :D

Re: Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 12:01
von __deets__
Die Methode zum alles-gross-machen einen Strings ist ".upper()"

Code: Alles auswählen

s = "hallo"
print(s.upper())

Re: Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 12:03
von phythonkid
Vielen Dank!
Weißt du auch wie man jetzt jeden zweiten Buchstaben nur groß macht?

Re: Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 12:13
von Sirius3
Es ist ja Deine Hausaufgabe. Was hast Du denn schon gelernt, und was könnte man davon benutzen, um etwas für jedes Zeichen zu tun?

Re: Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 12:14
von __deets__
Natuerlich weiss ich das. Aber wenn ich dir das verrate, dann ist das ja meine Loesung, und nicht deine. Was ich dir verraten kann: es gibt dafuer keine eingebaute Funktion, das musst du schon selbst programmieren. Du musst dazu auf jeden einzelnen Buchstaben nacheinander zugreifen, und du musst wissen, ob das gerade eine gerade Zahl ist, bei der du zugreifst. Dazu brauchst du

- eine for-schleife
- eine if-abfrage
- den Modulo-Operator, um zu pruefen ob eine Zahl durch zwei teilbar ist.

Re: Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 12:20
von phythonkid
Dank. Ich verstehe aber leider noch nicht wiso isch einen Modulo-Operator brauche um zu prüfen, ob die Zahl durch zwei teilbar ist. Es ist ja ein Satz und keien Zahlen. Oder verstehe ich da etwas falsch? Ich versuche ja jeden zweiten Buchstaben groß zu machen.

Re: Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 12:23
von /me
Und wie willst du sonst feststellen ob du bei einem Zeichen an einer geraden Position (2, 4, 6, ...) bist? Das ließe sich vielleicht noch mit einem Flag lösen, aber spätestens wenn die nächste Aufgabe lautet "mit jedem dritten Buchstaben", dann willst du den Modulo-Operator haben.

Wenn du deinem Lehrer die folgende Variante tatsächlich erklären kannst, dann hast du dir die Lösung verdient.

Code: Alles auswählen

''.join(itertools.chain(*(zip(text[::2].lower(), text[1::2].upper()))))

Re: Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 12:23
von __deets__
Ja. Jeden ZWEITEN. Zwei. Das ist eine Zahl. Wenn du also etwas jedes zweite mal machen willst, dann musst du zaehlen wie oft du es gemacht hast, und dann eben enscheiden, ob jetzt gerade jedes zweite mal ist. Es gibt auch andere, weniger elegante Wege, du kannst dir stattdessen merken, wie lange es her ist, dass du was gemacht hast, und es dann halt machen wenn wieder Zeit dafuer ist. Und deine Zaehlung von vorne beginnen. Aber das ist im Grunde wie modulo rechnen.

Re: Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 12:25
von Sirius3
Es gibt verschiedene Möglichkeiten, und eine davon, ist ganz direkt jeden Buchstaben zu nehmen und zu entscheiden ob der an einer geraden Position klein oder einer ungeraden Position groß gemacht wird. Und dazu ist der Modulo-Operator ganz nützlich.

Re: Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 12:26
von phythonkid
vielen dank. ich probiere es mal aus

Re: Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 12:33
von Jankie
Wenn du als Beispiel ""ich nehme gerade in der schule das thema python durch und habe mich da etwas ausprobiert" hast, soll der Output dann so aussehen: "iCh nEhMe gErAdE iN dEr sChUlE dAs tHeMa pYtHoN dUrCh" oder "iCh NeHmE gErAdE iN dEr ScHuLe DaS tHeMa PyThOn DuRcH"?

Also jedes zweite Zeichen im String oder nur auf jedes Wort einzelnt betrachtet?

Re: Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 12:35
von phythonkid
Ja! So soll das sein!

Re: Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 12:36
von /me
Jankie hat geschrieben: Donnerstag 2. April 2020, 12:33 [...] soll der Output dann so aussehen: "iCh nEhMe gErAdE iN dEr sChUlE dAs tHeMa pYtHoN dUrCh"
Hätte man ein Programm dafür benutzt wäre das Beispiel korrekt gewesen. Du ersetzt nicht einheitlich.

Re: Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 12:38
von /me
phythonkid hat geschrieben: Donnerstag 2. April 2020, 12:35 Ja! So soll das sein!
Du verarscht uns jetzt, oder? Die Frage war "Variante 1 oder Variante 2" und du antwortest mit "Ja"? Du kannst doch hier keine boolsche Logik anwenden.

Re: Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 12:38
von Jankie
Klar ersetzte ich einheitlich. Nur für jedes Wort einzelnt betrachtet.

Ich habe mit RegEx jedes Wort in eine Liste gepackt und dann für jedes Wort in der Liste jedes zweite Zeichen groß geschreiben. Dann mit " ".join habe ich die Liste wieder zusammengefügt zu einem String.

Re: Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 12:41
von phythonkid
Es tut mir leid.Ich war wohl in gedanken... ich meinte Variante 2 ist die richtige.

Re: Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 12:42
von /me
Jankie hat geschrieben: Donnerstag 2. April 2020, 12:38 Klar ersetzte ich einheitlich. Nur für jedes Wort einzelnt betrachtet.
Nur, dass das falsche Beispiel nicht die mit den einzeln betrachteten Wörtern ist. Bei "iCh nEhMe gErAdE iN dEr sChUlE dAs tHeMa pYtHoN dUrCh" nimmst du jedes Zeichen, hast aber ab dem "in" einen Versatz.

Re: Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 12:44
von /me
phythonkid hat geschrieben: Donnerstag 2. April 2020, 12:41 Es tut mir leid.Ich war wohl in gedanken... ich meinte Variante 2 ist die richtige.
Dann definiere "Wort". Was definiert ein Wort und grenzt es vom Rest des Textes ab. Ist "Castrop-Rauxel" ein Wort oder zwei?

Re: Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 12:46
von Jankie
Tut mir Leid ich verstehe nicht was du mit Versatz meinst

Habe das mit folgendem Code gemacht: (Ist ja eh die falsche Variante darum nehme ich keinem die Hausaufgaben weg)

Code: Alles auswählen

def upper_every_second_letter_in_word(input_string):
    temp = []
    all_words = re.findall(r'\b\w+\b', input_string)
    for word in all_words:
        temp.append("".join(char.upper() if index % 2 else char.lower() for index, char in enumerate(word)))
    return " ".join(temp)

Re: Funktion mit jedem zweiten Buchstaben groß

Verfasst: Donnerstag 2. April 2020, 13:03
von Jankie
Was genau ist denn jetzt gewollt?

text = "ich nehme gerade in der schule das thema python durch"


Version 1:
"iCh NeHmE gErAdE iN dEr ScHuLe DaS tHeMa PyThOn DuRcH"

Version 2:
"iCh nEhMe gErAdE In dEr sChUlE DaS ThEmA PyThOn dUrCh"

Version 3:
"iCh nEhMe gErAdE iN dEr sChUlE dAs tHeMa pYtHoN dUrCh"