Funktion mit jedem zweiten Buchstaben groß

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
phythonkid
User
Beiträge: 31
Registriert: Donnerstag 2. April 2020, 11:08

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
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Methode zum alles-gross-machen einen Strings ist ".upper()"

Code: Alles auswählen

s = "hallo"
print(s.upper())
phythonkid
User
Beiträge: 31
Registriert: Donnerstag 2. April 2020, 11:08

Vielen Dank!
Weißt du auch wie man jetzt jeden zweiten Buchstaben nur groß macht?
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

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?
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
phythonkid
User
Beiträge: 31
Registriert: Donnerstag 2. April 2020, 11:08

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.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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()))))
Zuletzt geändert von /me am Donnerstag 2. April 2020, 12:29, insgesamt 1-mal geändert.
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
phythonkid
User
Beiträge: 31
Registriert: Donnerstag 2. April 2020, 11:08

vielen dank. ich probiere es mal aus
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

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?
phythonkid
User
Beiträge: 31
Registriert: Donnerstag 2. April 2020, 11:08

Ja! So soll das sein!
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

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.
Zuletzt geändert von Jankie am Donnerstag 2. April 2020, 12:41, insgesamt 1-mal geändert.
phythonkid
User
Beiträge: 31
Registriert: Donnerstag 2. April 2020, 11:08

Es tut mir leid.Ich war wohl in gedanken... ich meinte Variante 2 ist die richtige.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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?
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

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)
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

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"
Antworten