Unverständliche Aufgabe in Tutorial

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.
Antworten
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

Hi

Zum Einstand mit Python arbeite ich ein Tutorial durch.
In dem Tutorial komme ich bei der 2. Aufgabe (Übung: formuliere diese Funktion so um, dass sie die Drei-Parameter-Version von find aus der Übung davor verwendet, anstatt den String mit einer Schleife zu durchlaufen.) bei Kapitel 7.8 nicht weiter. Genau genommen weiß ich gar nicht was ich da überhaupt machen soll.

Mein soweit funktionierender Code zur 1. Aufgabe ist folgender:

Code: Alles auswählen

def countLetters(str, letter):
    count = 0 
    for char in str: 
        if char == letter: 
            count = count + 1 
    print count

countLetters("banana", "n")

Gruß
Atalanttore
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Ehrlichgesagt kapier ich nicht was das Tut von mir will...

Aber ich glaube so solls aussehen:

Code: Alles auswählen

>>> def count_letters(str_, letter, index):
...     count = 0
...     for char in str_[index:]:
...         if char == letter:
...             count += 1
...     return count
...     
>>> count_letters("mississippi", "s", 4)
2
>>> count_letters("mississippi", "s", 2)
4
>>> count_letters("mississippi", "s", 3)
3
Die >>> und die ... einfach wegdenken, die sind da, da ich das in "PyCrust" eingeben hab'.

Ein paar Anmerkungen, ich verwende str_ statt str, da "str" ein builtin von Python ist, solche builtins sollte man nicht überschreiben.
str_[index:] ist "sliceing" Ich weiß nicht ob das Tut das schon behandelt hat oder nicht, falls nicht kannst du ja mal im Tut danach suchen oder googlen.
return gibt einen Wert zurück z.B.:

Code: Alles auswählen

x = count_letters("mississippi", "s", 2) # x = 4
print x
the more they change the more they stay the same
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@Dav1d: Nee nee, ich denke das meinen die so:

Code: Alles auswählen

In [6]: wort = "mississippi"

In [7]: wort.find("s", 0)
Out[7]: 2

In [8]: wort.find("s", 2+1)
Out[8]: 3

In [9]: wort.find("s", 3+1)
Out[9]: 5

In [10]: wort.find("s", 5+1)
Out[10]: 6

In [11]: wort.find("s", 6+1)
Out[11]: -1
Hier mal mit der eingebauten String-Methode find(), statt der im Tutorial erstellten Funktion als Denkanstoß.
Dazu benötigt man dann eine while-Schleife würd ich mal sagen... oder ansonsten wäre auch noch Rekursion denkbar.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

Dav1d hat geschrieben:Ehrlichgesagt kapier ich nicht was das Tut von mir will...

Aber ich glaube so solls aussehen:

Code: Alles auswählen

>>> def count_letters(str_, letter, index):
...     count = 0
...     for char in str_[index:]:
...         if char == letter:
...             count += 1
...     return count
...     
>>> count_letters("mississippi", "s", 4)
2
>>> count_letters("mississippi", "s", 2)
4
>>> count_letters("mississippi", "s", 3)
3
Danke, aber was bedeutet das "+=" in "count += 1" ?

Dav1d hat geschrieben:Die >>> und die ... einfach wegdenken, die sind da, da ich das in "PyCrust" eingeben hab'.
Ist "PyCrust" eine Alternative zu "IDLE"?

Dav1d hat geschrieben:Ein paar Anmerkungen, ich verwende str_ statt str, da "str" ein builtin von Python ist, solche builtins sollte man nicht überschreiben.
Was genau meinst du mit "builtin"?

Dav1d hat geschrieben:str_[index:] ist "sliceing" Ich weiß nicht ob das Tut das schon behandelt hat oder nicht, falls nicht kannst du ja mal im Tut danach suchen oder googlen.
Nein, von "sliceing" habe ich in dem Tutorial noch nichts gelesen. Werde mal danach googlen, wenn es wichtig ist.

Dav1d hat geschrieben:return gibt einen Wert zurück z.B.:

Code: Alles auswählen

x = count_letters("mississippi", "s", 2) # x = 4
print x
Das bekomme ich mittlerweile einigermaßen auf die Reihe.


Gruß
Atalanttore
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Atalanttore hat geschrieben: Ist "PyCrust" eine Alternative zu "IDLE"?
Ja.
Atalanttore hat geschrieben: Was genau meinst du mit "builtin"?
Kurz und salopp gesagt: Funktionalität, die zum Kernumfang von Python gehört. 'str' zum Beispiel ist eine Funktion, die zum Umwandeln in Zeichenketten dient. Definierst du irgendwo einen Namen 'str', ist diese Funktion nicht mehr erreichbar.
Atalanttore hat geschrieben: Nein, von "sliceing" habe ich in dem Tutorial noch nichts gelesen. Werde mal danach googlen, wenn es wichtig ist.
Es ist wichtig. Sehr sogar. Aber such besser nach 'slicing' ;) Im Tutorial sollte es im Zusammenhang mit Listen und Tupeln, eventuell auch mit Strings behandelt werden. Wenn nicht, wäre es an der Zeit, das Tutorial durch ein besseres zu ersetzen. In der Regel empfehlen wir hier das offizielle von python.org bzw. dessen deutsche Übersetzung http://tutorial.pocoo.org/ (auf die passende Version achten!).
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Atalanttore hat geschrieben:Danke, aber was bedeutet das "+=" in "count += 1" ?
Erhöhe den Wert der in count steht um 1. Die Abkürzung für count = count + 1.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

/me hat geschrieben:
Atalanttore hat geschrieben:Danke, aber was bedeutet das "+=" in "count += 1" ?
Erhöhe den Wert der in count steht um 1. Die Abkürzung für count = count + 1.
Leider falsch, ``count = count + 1`` hat ein anderes Verhalten als ``count += 1``. += usw. ruft ``count.__iadd__(1)`` auf statt ``count.__add__(1)``
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

DasIch hat geschrieben:
/me hat geschrieben:
Atalanttore hat geschrieben:count += 1
Erhöhe den Wert der in count steht um 1. Die Abkürzung für count = count + 1.
Leider falsch, ``count = count + 1`` hat ein anderes Verhalten als ``count += 1``. += usw. ruft ``count.__iadd__(1)`` auf statt ``count.__add__(1)``
Im Kontext dieser Frage und des Wissens des Users halte ich meine Erklärung für verständlicher und im Moment für völlig ausreichend.
BlackJack

@DasIch: Auch nicht ganz richtig denn das Verhalten bleibt tatsächlich gleich!

Ich glaube nicht, dass den OP zu diesem Zeitpunkt diese Feinheiten interessieren; zumal das "Tutorial" -- was eigentlich ein Buch ist -- nicht zum Python-lernen gedacht ist, sondern zum programmieren lernen. Wenn man das durch hat, ist man kein guter Python-Programmierer im Sinne, dass man alle Feinheiten der Sprache kennt oder besonders "pythonisch" programmiert, sondern man sollte die Prinzipien von Programmierung allgemein verstanden haben, also den Teil den man problemlos auf die meisten imperativen Programmiersprachen übertragen kann.

@Atalanttore: Wenn Du dann in Python programmieren möchtest, solltest Du noch einmal gezielt Python lernen.
Antworten