Hallo erstmal,
also ich bin ein echter Neuling was Python angeht und erledige grad Übungsaufgaben und komme bei einer einfach nicht weiter und hoffe ihr könnt mir helfen. Folgende Vorgaben:
1. Dem Programm wird ein String übergeben,der in der Variable s steht
2. drei weitere Variablen sind vorinitialisiert: anzahl_klein , anzahl_groß, anzahl_sonderz
3. die Buchstaben äüöß sind Kleinbuchstaben (gehören also zu anzahl_klein) , ÄÖÜ sind Großbuchstaben, der Rest sind Sonderzeichen.
Nun muss am Ende die Anzahl innerhalb des Strings wiedergegeben werden. Wenn der string also zum Beispiel "äääkkkÜ" wäre, dann wäre anzahl_klein = 3, anzahl_groß = 1 und anzahl_sonderz = 3. Ich weiß, dass ich dies mit print mache.
Ich weiß auch, dass ich mit Hilfe von Schleifen, also for oder while, die Anzahl zählen könnte, aber jedoch weiß ich nicht, wie ich das mit mehreren Buchstaben machen muss und ich stehe jetzt schon eine Weile auf dem Schlauch. Vielleicht kann mir wer helfen oder zumindest eine Idee geben?
Wäre echt super.
Anzahl bestimmter Buchstaben in String zählen
@BMTP: Du musst halt eine Schleife über die Zeichen in `s` schreiben und testen ob ein Buchstabe ein Grossbuchstabe, ein Kleinbuchstabe, oder ein Sonderzeichen ist. Einen Test davon musst Du nicht explizit machen, denn nachdem die zwei anderen Tests negativ sind, muss es ja die übrig gebliebene Variante sein. Falls also die Frage nur ist wie man testet ob ein Zeichen in einer Menge von Zeichen enthalten ist, schau Dir mal den ``in``-Operator auf Listen an, beziehungsweise vielleicht auch den Mengendatentyp `set`.
Also, um die Aufgaeb etwas zu präzisieren, folgende Vorgaben sind mir dabei gemacht:
Was mich halt besonders verwirrt, ist das alle Variablen am Anfang = 0 gesetzt werden, weil egal was ich in der Lücke mache, bekomme ich am Ende nur 3 Nullen heraus. Wenn ich das Programm laufen lasse, muss ich einen String eingeben, z.B. Äpfel und das Ergebnis müsste dann sein:
0
1
4
Code: Alles auswählen
s = sys.stdin.readline()
anzahl_klein = 0
anzahl_gross = 0
anzahl_sonderz = 0
# ---- Beginn des fehlenden Codes ----
# benutzten der drei Variablen
# ---- Ende des fehlenden Codes ----
print(anzahl_klein)
print(anzahl_gross)
print(anzahl_sonderz)
0
1
4
Zuletzt geändert von Anonymous am Samstag 21. November 2015, 12:47, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Irgendwie gefällt mir deine Aufgabe nicht (Sind normale Kleinbuchstaben tatsächlich Sonderzeichen?) und die Vorgaben sind auch sehr einfach gehalten. Wahrscheinlich hätte ich die 3 Variablen eher in ein Wörterbuch gepackt, aber wahrscheinlich hattet ihr das noch nicht bzw. wird noch nicht in deinem Handbuch behandelt:
Du müsstest Dir mal die for-Schleife und die if-elif-else-Anweisung ansehen. Das fehlt dir aktuell wohl noch.
Code: Alles auswählen
s = "äääkkkÜ"
anzahl_klein = 0
anzahl_gross = 0
anzahl_sonderz = 0
for a in s:
if a in "äüöß":
anzahl_klein += 1
elif a in "ÄÖÜ":
anzahl_gross += 1
else:
anzahl_sonderz += 1
print(anzahl_klein)
print(anzahl_gross)
print(anzahl_sonderz)
@pixewakb: Da müsste man aber noch dazu schreiben dass das Python 3 ist, denn in Python 2 wäre das fehlerhaft.
Edit: Und Du hast da gerade jemandem seine Hausaufgabe komplett gelöst.
Edit: Und Du hast da gerade jemandem seine Hausaufgabe komplett gelöst.
@pixewakb: Danke für die Hilfestellung, jedoch scheint es immernoch einen Fehler zu geben bei anzahl_sonderz wird nicht korrekt gezählt, sondern immer 1 mehr als wirklich da ist. Also z.B. wenn ich ääÖÖ eingebe, komm bei Anzahl_sonderz 1 und nicht 0.
Und das ist keine Hausaufgabe, sondern eine Übungssammlung die es bei uns in der Uni gibt, mit ganz vielen solchen Aufgaben.
Und das ist keine Hausaufgabe, sondern eine Übungssammlung die es bei uns in der Uni gibt, mit ganz vielen solchen Aufgaben.
@BMTP
Noch so ein Mysterium:Ein 'ä' ist intern eben nicht nur ein Zeichen, sondern wird über zwei Bytes repräsentiert:Beschäftige Dich einmal mit Encoding, dann wird Dir das klarer.
Noch so ein Mysterium:
Code: Alles auswählen
>>> len('a')
1
>>> len('ä')
2
Code: Alles auswählen
>>> bytes('ä')
'\xc3\xa4'
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
@BMTP: Das Ergebnis ist schon korrekt so denn Du gibst ja nicht nur ääÖÖ ein. Du gibst da noch etwas ein bevor das Programm anfängt zu zählen, und das wird natürlich auch mitgezählt. Überleg mal genau welche Tasten Du da drückst.
Ja , würde ich jetzt normalerweise auch denken, aber wir haben eine Plattform wo wir soetwas hochladen können (DomJudge falls das jemand kennt) wo die Aufgabe automatisch kontrolliert wird und irgendwie wird es als falsch gewertet. Trotzdem Danke für die Hilfe.
Eine allgemeine Frage hätte ich aber noch: for - Schleifen sind ja eigentlich explizit für Listen innerhalb von Python. Jetzt ist es jedoch so, dass ich ja eigentlich einen String eingebe. Muss ich dann vorher s.split() eingeben, um daraus eine Liste zu machen?
Eine allgemeine Frage hätte ich aber noch: for - Schleifen sind ja eigentlich explizit für Listen innerhalb von Python. Jetzt ist es jedoch so, dass ich ja eigentlich einen String eingebe. Muss ich dann vorher s.split() eingeben, um daraus eine Liste zu machen?
@BMTP: ``for``-Schleifen sind nicht nicht für Listen. Nach dem ``in`` kann jedes Objekt benutzt werden das iterierbar ist. Das sind Listen, aber das sind auch viele andere Datentypen. Zeichenketten, Bytearrays, Dateiobjekte, Wörterbücher, Mengen — um mal ein paar Grunddatentypen zu nennen. Aber auch viele andere Objekte aus der Standardbibliothek. Und man kann auch eigene Datentypen programmieren über die man mit ``for`` iterieren kann. Ausserdem gibt es Generatorausdrücke- und Funktionen die ebenfalls ein iterierbares Ergebnis liefern was keine Liste ist.
BlackJack hat geschrieben:@pixewakb: Da müsste man aber noch dazu schreiben dass das Python 3 ist, denn in Python 2 wäre das fehlerhaft.
Dann sollte man umgekehrt auch darauf hinweisen, dass das nur für Python 2 gilt; in Python 3 ist es, wie man es intuitiv erst mal auch erwarten würde, nur ein Zeichen. Aufgrund der Verwendung der Print-Funktion ohne __future__ Import im vorgegebenen Code hätte ich jetzt angenommen, dass das die Version ist, die verwendet wird.mutetella hat geschrieben:@BMTP
Ein 'ä' ist intern eben nicht nur ein Zeichen, sondern wird über zwei Bytes repräsentiert:
@nezzcarth: Die Grenze zwischen `print()`-Funktion und ``print``-Anweisung mit unnötigen Klammern ist fliessend. Solange da nur ein Argument/Wert steht, gehe ich davon aus dass das kein eindeutiger Hinweis ist. Es gab hier schon öfter Leute die Klammern auch in Python 2 gesetzt haben. Ohne den passenden `__future__`-Import.
@nezzcarth
Grundsätzlich hast Du Recht. Allerdings weist das vom OT nicht erwartete Verhalten eindeutig darauf hin, dass er wohl Python 2 verwendet.
Grundsätzlich hast Du Recht. Allerdings weist das vom OT nicht erwartete Verhalten eindeutig darauf hin, dass er wohl Python 2 verwendet.
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
@mutetella: das nicht erwartete Verhalten weißt auf etwas ganz anderes hin, was BlackJack nämlich schon angesprochen hat. Es ist genau ein Zeichen zu viel und nicht etwa 4, wie man bei falschem Encoding erwarten könnte.