@dt_fahrer: Du musst einfach nur Schritt für Schritt das vorgehen was Du auch selbst, manuell machen würdest, in Code ausdrücken. *Du* kannst Die Aufgabe doch lösen. Jetzt musst Du sie formal für den Rechner formulieren.
Wieso das 'A' irgendwo einbauen? Du willst doch nicht wissen ob 'A' ein Grossbuchstabe ist, ich denke mal das weisst Du auch so. Du möchtest wissen ob der erste Buchstabe von jedem Wort ein Grossbuchstabe ist. Und falls ja, willst Du das Wort ausgeben lassen.
Edit: Das Problem für uns ist jetzt, dass Du alle Bausteine die Du zum lösen der Aufgabe brauchst, kennst. Dazwischen und der Lösung ist jetzt kaum bis gar keine Luft mehr Dir zu helfen, ohne eine Lösung zu zeigen. Was Dir wiederum nicht hilft das *selbst* zu lösen.
Listen in Python
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
noch ein bisschen konkreter:
* Python hat die Builtin-Funktion `enumerate`. Damit kannst du über eine Liste iterieren und bekommst zusätzlich einen Zähler dazu.
* Beim Iterieren über die Liste bekommst du pro Iterationsschritt einen String zurück. Daraus extrahierst den ersten Buchstaben (Tipp: Unter Python kann man auf einzelne Buchstaben per Index zugreifen).
* Diesen ersten Buchstaben prüfst du auf Groß- / Kleinschreibung, siehe oben.
* Wenn der Buchstabe groß geschrieben ist -> Ausgabe per `print`; wenn nein -> nächster Iterationsschritt
Falls du es wider erwarten nicht hin bekommst -> poste hier den Code, den du hast, dann haben wir wenigsten eine Diskussionsgrundlage
Gruß, noisefloor
noch ein bisschen konkreter:
* Python hat die Builtin-Funktion `enumerate`. Damit kannst du über eine Liste iterieren und bekommst zusätzlich einen Zähler dazu.
* Beim Iterieren über die Liste bekommst du pro Iterationsschritt einen String zurück. Daraus extrahierst den ersten Buchstaben (Tipp: Unter Python kann man auf einzelne Buchstaben per Index zugreifen).
* Diesen ersten Buchstaben prüfst du auf Groß- / Kleinschreibung, siehe oben.
* Wenn der Buchstabe groß geschrieben ist -> Ausgabe per `print`; wenn nein -> nächster Iterationsschritt
Falls du es wider erwarten nicht hin bekommst -> poste hier den Code, den du hast, dann haben wir wenigsten eine Diskussionsgrundlage
Gruß, noisefloor
@dt_fahrer: weißt Du, wie man eine if-Abfrage macht? Weißt Du was eine for-Schleife ist? Wenn Du Dein Problem als "für jedes Element in der Liste wenn es ein Substantiv ist, gib das Element aus" wörtlich ins Englische übersetzt hast Du quasi schon das Python-Programm.
woerter=['Aal','arbeiten','Berta','Lesung','fröhlich']
substantive='Aal,Berta,Lesung'
for wort in range (len(woerter)):
if woerter==substantive:
print (wort,woerter[wort])
so vielleicht? bin ich schon etwas näher dran?
substantive='Aal,Berta,Lesung'
for wort in range (len(woerter)):
if woerter==substantive:
print (wort,woerter[wort])
so vielleicht? bin ich schon etwas näher dran?
Bei deiner letzten Idee sucht DU die Substantive aus, nicht dein Programm!
EDIT: Der Befehl heißt .isupper()
Dem solltest du mal weiter nachgehen.dt_fahrer hat geschrieben:könnte ich dieses s.upper() sich mit einbauen in die schleife??
EDIT: Der Befehl heißt .isupper()
Zuletzt geändert von Zizibee am Donnerstag 18. Mai 2017, 08:28, insgesamt 1-mal geändert.
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
@dt_fahrer: Programmieren ist nicht raten! Genau das machst du aber gerade.
Hast du schon mal das offizielle Python-Tutorial durchgearbeitet? Wenn nein wäre JETZT ein guter Zeitpunkt, damit dein Grundverständnis passt.
Und du möchtest auch nicht die Methode `upper()` nutzen, weil die den String einfach nur komplett in Großbuchstaben umwandelst. Die o.g. Methode heißt `isupper()` und die liefert einen Wahrheitswert zurück. Den kannst du dann als Bedingung in die if-Abfrage einbauen.
Gruß, noisefloor
@dt_fahrer: Programmieren ist nicht raten! Genau das machst du aber gerade.
Hast du schon mal das offizielle Python-Tutorial durchgearbeitet? Wenn nein wäre JETZT ein guter Zeitpunkt, damit dein Grundverständnis passt.
Und du möchtest auch nicht die Methode `upper()` nutzen, weil die den String einfach nur komplett in Großbuchstaben umwandelst. Die o.g. Methode heißt `isupper()` und die liefert einen Wahrheitswert zurück. Den kannst du dann als Bedingung in die if-Abfrage einbauen.
Gruß, noisefloor
@dt_fahrer: Nein, die passt so nicht. Du willst eine Schleife, die über Index und Wort geht. Dafür gibt es die schon mehrfach erwähnte `enumerate()`-Funktion. Und Du hattest da ja bereits mal die richtige Schleife. Programmieren ist nicht raten oder so lange Kombinationen von Codestücken ausprobieren bis zufällig das richtige heraus zu kommen scheint.
Es ist auch etwas Konzentration und Präzision gefragt. Du musst eine Idee davon haben was die einzelnen Konstrukte (Zuweisung, Schleife, bedingte Ausführung, Operatoren, Funktionen, und Methoden) machen, und diese Idee muss mit dem tatsächlichen Verhalten von Python übereinstimmen. An der Stelle kann man dann auch ausprobieren und experimentieren um die Vorstellung von dem was da passiert, mit der Realität in Einklang zu bringen. In dem man sich bei Fehlversuchen klar macht was da passiert und warum das Ergebnis so aussieht wie es aussieht. Und nicht nur einfach planlos zur nächsten Kombination über geht, die man noch nicht ausprobiert hat. Genau dadurch lernt man.
Es ist auch etwas Konzentration und Präzision gefragt. Du musst eine Idee davon haben was die einzelnen Konstrukte (Zuweisung, Schleife, bedingte Ausführung, Operatoren, Funktionen, und Methoden) machen, und diese Idee muss mit dem tatsächlichen Verhalten von Python übereinstimmen. An der Stelle kann man dann auch ausprobieren und experimentieren um die Vorstellung von dem was da passiert, mit der Realität in Einklang zu bringen. In dem man sich bei Fehlversuchen klar macht was da passiert und warum das Ergebnis so aussieht wie es aussieht. Und nicht nur einfach planlos zur nächsten Kombination über geht, die man noch nicht ausprobiert hat. Genau dadurch lernt man.
@dt_fahrer: Wie andere auch schon geschrieben haben: Du mußt aus dem Ratemodus raus. Da Python einen interaktiven Interpreter hat, ist dies ganz einfach: teste Deinen Code und schaue was rauskommt! Dann brauchst Du hier nicht zu fragen, ob das richtig war, was Du versuchst hast. Nehmen wir Deinen Code aus einem früheren Posting, denn da warst Du schon auf dem richtigen Weg:
Nach diesem Test sollte Dir klar sein, wie Du an die Wörter aus der Liste inklusive Index kommst. Nun musst Du nur noch für jedes Wort feststellen, ob es sich um ein Substantiv handelt, so dass nur in diesem Fall print aufgerufen wird. Hinweise darauf, wie dies geht, hast Du hier schon bekommen.
Code: Alles auswählen
Python 3.6.1 |Continuum Analytics, Inc.| (default, Mar 22 2017, 19:25:17)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> woerter=['Aal','arbeiten','Berta','Lesung','fröhlich']
>>> for i, wort in enumerate(woerter):
... print(i, wort)
...
0 Aal
1 arbeiten
2 Berta
3 Lesung
4 fröhlich
>>>
Nach diesem Test sollte Dir klar sein, wie Du an die Wörter aus der Liste inklusive Index kommst. Nun musst Du nur noch für jedes Wort feststellen, ob es sich um ein Substantiv handelt, so dass nur in diesem Fall print aufgerufen wird. Hinweise darauf, wie dies geht, hast Du hier schon bekommen.
Code: Alles auswählen
woerter=['Aal','arbeiten','Berta','Lesung','fröhlich']
for i,wort in enumerate (woerter):
if woerter== 'A'.isupper():
print(i,wort)
else:
woerter!='a'.isupper()
print(i,wort)
Noch nicht so ganz...
Du willst prüfen, ob der erste Buchstabe des Wortes groß oder klein geschrieben ist und nicht 'A' bzw. 'a'.
Wann willst du denn etwas ausgeben?
Schau dir wirklich mal an, wie eine IF-Bedingung funktioniert und aufgebaut ist! Zum Beispiel im Python-Kurs.eu.
Du willst prüfen, ob der erste Buchstabe des Wortes groß oder klein geschrieben ist und nicht 'A' bzw. 'a'.
Wann willst du denn etwas ausgeben?
Schau dir wirklich mal an, wie eine IF-Bedingung funktioniert und aufgebaut ist! Zum Beispiel im Python-Kurs.eu.
Der Code ist schon wieder geraten. Wie soll die Liste woerter sinnvoll mit dem Rückgabewert von isupper() verglichen werden?
Grundsätzlich korrekt ist die Schleife
Jetzt willst du die Ausgabe (print) aber nur vornehmen wenn (if) etwas Bestimmtes zutrifft. Im anderen Fall (else) möchtest du nichts tun, also brauchst du den Fall gar nicht behandeln.
Was ist jetzt das, was du prüfen möchtest? Du möchtest wissen ob der erste Buchstabe des aktuellen Wortes (word) ein Großbuchstabe ist. Du weißt wie man einen String daraufhin überprüft ob er aus Großbuchstaben besteht - zumindest hast du die entsprechende Methode in deinem Code verwendet. Jetzt darfst du die Prüfung nur auf den ersten Buchstaben des Wortes anwenden. Solltest du nicht wissen, wie du einen einzelnen Buchstaben bekommst, dann schau dir noch mal das Kapitel über Strings im Tutorial an.
Grundsätzlich korrekt ist die Schleife
Code: Alles auswählen
for i, wort in enumerate(woerter):
print(i, wort)
Was ist jetzt das, was du prüfen möchtest? Du möchtest wissen ob der erste Buchstabe des aktuellen Wortes (word) ein Großbuchstabe ist. Du weißt wie man einen String daraufhin überprüft ob er aus Großbuchstaben besteht - zumindest hast du die entsprechende Methode in deinem Code verwendet. Jetzt darfst du die Prüfung nur auf den ersten Buchstaben des Wortes anwenden. Solltest du nicht wissen, wie du einen einzelnen Buchstaben bekommst, dann schau dir noch mal das Kapitel über Strings im Tutorial an.
@dt_fahrer: Das ist doch schon wieder komplett geraten. Oder kannst Du erklären wie Du auf diese ``if``-Bedingung gekommen bist? Was hast Du Dir dabei gedacht? Beschreibe doch mal in Worten was dort geprüft wird. Wie hast Du überprüft ob diese Gedankengänge mit dem tatsächlien Verhalten des Programms übereinstimmen, beziehungsweise ab welchem Punkt/Teilausdruck das Programm nicht das macht was Du gedacht hast was es macht?
Hast Du wenigstens ermittelt welches `print()` für welche Ausgabe verantwortlich ist? Welcher der beiden `print()`-Aufrufe gibt welche Zeile der Ausgabe aus?
Was denkst Du was in Zeile 6 passiert und welchen Einfluss hat das auf den Programmablauf?
Hast Du wenigstens ermittelt welches `print()` für welche Ausgabe verantwortlich ist? Welcher der beiden `print()`-Aufrufe gibt welche Zeile der Ausgabe aus?
Was denkst Du was in Zeile 6 passiert und welchen Einfluss hat das auf den Programmablauf?