Seite 1 von 1

Unverständliche Aufgabe in Tutorial

Verfasst: Mittwoch 6. Oktober 2010, 18:48
von Atalanttore
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

Re: Unverständliche Aufgabe in Tutorial

Verfasst: Mittwoch 6. Oktober 2010, 19:01
von Dav1d
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

Re: Unverständliche Aufgabe in Tutorial

Verfasst: Mittwoch 6. Oktober 2010, 19:10
von Hyperion
@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.

Re: Unverständliche Aufgabe in Tutorial

Verfasst: Mittwoch 6. Oktober 2010, 19:37
von Atalanttore
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

Re: Unverständliche Aufgabe in Tutorial

Verfasst: Mittwoch 6. Oktober 2010, 21:07
von Pekh
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!).

Re: Unverständliche Aufgabe in Tutorial

Verfasst: Mittwoch 6. Oktober 2010, 21:23
von /me
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.

Re: Unverständliche Aufgabe in Tutorial

Verfasst: Mittwoch 6. Oktober 2010, 21:49
von DasIch
/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)``

Re: Unverständliche Aufgabe in Tutorial

Verfasst: Mittwoch 6. Oktober 2010, 22:02
von /me
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.

Re: Unverständliche Aufgabe in Tutorial

Verfasst: Mittwoch 6. Oktober 2010, 22:07
von 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.