Funktionen - String in Variable speichern?

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
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

Eine ganz blöde Frage:

Code: Alles auswählen


def func1(txt):
   
Ich möchte für txt ein Wort eingeben. Möchte das gerne "speichern" und das Wort im nachhinein, wieder ausgeben lassen. zb.: nur in großbuchstaben oder nur kleine buchstaben.

Wie kann ich den Parameter am besten ablegen? Ich weiß nicht wie dafür die Syntax etc. ist. Danke für Hilfe.
BlackJack

@duodiscus: Variablen definiert man in denen man ihnen einen Wert mit ``=`` zuweist. Also zum Beispiel ``text = 'Hallo'``.

Was die Funktion jetzt damit zu tun hat, habe ich nicht verstanden‽
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@duodiscus
Hilft Dir das vielleicht weiter?

Code: Alles auswählen

>>> def func(txt):
...     return txt.upper()
... 
>>> func(txt='HaLlo')
'HALLO'
>>> func('HallO')
'HALLO'
>>> func()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: func() takes exactly 1 argument (0 given)
>>> def func(txt='default_value'):
...     return txt.upper()
... 
>>> func()
'DEFAULT_VALUE'
>>> func('hallo')
'HALLO'
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

@mutetella

Ja, das hat mir weitergeholfen. Danke für deine hilfreiche Antwort.
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

Ich habe es nun mit print gemacht, da ich mehrere Ausgaben haben wollte u.a. swapcase, lower etc.

In der Aufgabe, die ich zu bearbeiten habe ist noch etwas formuliert, das ich nicht verstehe, was man überhaupt machen soll und zwar:

"Auch die Anzahl von mehreren im String enthaltenen Substrings ausgeben lassen."

Ich verstehe nicht was damit gemeint ist, was man da machen soll. Ich weiß, das ein Substring z.B. von dem Wort Test beispielsweise das "e" als einzelner Buchstabe ist.

Kann mir jemand die Aufgabe vllt. näher erläutern? Soll ich die Zeichenanzahl des Strings ausgeben?
BlackJack

@duodiscus: Ich würde das so verstehen das Du eine Zeichenkette bekommst und eine Liste mit weiteren Zeichenketten und für jede davon ermitteln sollst wie oft sie in der ersten Zeichenkette vorkommt.
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

Ich hatte bisher noch nie Listen. Und wir haben sie auch noch nicht wirklich behandelt. Gibt es auch noch eine andere Interpretationsmöglichkeit? Deine Erklärung über die Listen habe ich leider nicht verstanden wie du das meinst
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@duodiscus
Ich würde die Aufgabe auch eher so interpretieren, dass in einem String, z. B. 'Ich bin ein String' auch Teile davon, z. B. 'bin', behandelt werden sollen.
Andererseits, was spricht dagegen, sich mit Listen zu beschäftigen, auch wenn die noch nicht behandelt wurden?

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

Da spricht natürlich nichts gegen, aber die werden erst kommende Woche genauer behandelt und daher gehe ich davon aus, das ich diese Aufgabe nicht anhand von Listen lösen muss. Wie soll ich deine Interpretation denn angehen?

Also dann sollte er ja demnach ausgeben für 'Ich bin ein String' = Anzahl Substrings: '4'.
Mit welchem Befehl kann ich die denn zählen lassen? Danke schonmal!
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@duodiscus:
So ganz ohne Liste würde ich einzelne Wörter im einfachsten Fall so zählen:

Code: Alles auswählen

>>> 'Ich bin ein String'.count(' ') + 1
4
mutetella

EDIT: Oder zumindest noch die beiden Sonderfälle berücksichtigen:

Code: Alles auswählen

>>> text = ' Ich bin ein String '
>>> text.count(' ') + 1 - text.startswith(' ') - text.endswith(' ')
4
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Oder vielleicht etwas robuster:

Code: Alles auswählen

len(text.strip().split())
Hier sind jedoch so Sonderfälle wie die Abtrennung durch einen Gedankenstrich noch nicht mit aufgenommen. Der Gedankenstrich würde fälschlicherweise als eigenes Wort behandelt werden. Aber das lässt sich ja alles einbauen...
BlackJack

Also ich sehe ja das die Aufgabenstellung Spielraum bei der Interpretation lässt, aber „Zähle die Worte in einer Zeichenkette” kann ich da nicht rauslesen. Das hätte hoffentlich auch niemand *so* formuliert.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@snafu
Wobei Deine Lösung eine Liste verwendet...

@BlackJack
Na ja, 'Substring' ist halt schon sehr eigenartig formuliert, letztlich ist ja jedes einzelne Zeichen innerhalb eines Strings ein 'Substring'...

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

Ich habe mir jetzt mal die Listen genauer angeschaut. Jedoch kenne ich für die nicht viele Befehle.
Ich habe es jetzt erstmal so gemacht zum probieren:

Code: Alles auswählen


def func2(txt):
    list=[txt]
    print ('Großbuchstaben:',txt.upper(),'\nKleinbuchstaben:', txt.lower(),'\nVertauschung Groß/Klein:',txt.swapcase(),
           '\nSubstrings', list.count(txt) )

>>> func2('Dies ist ein String')
Großbuchstaben: DIES IST EIN STRING 
Kleinbuchstaben: dies ist ein string 
Vertauschung Groß/Klein: dIES IST EIN sTRING 
Substrings 1
>>> 

Jedoch ergibt das nicht die einzelnen Elemente als Wörter. Ist mir klar, das er den Satz als einzelnes Element der Liste dann ansieht. Aber wie kann ich das ändern, das er jedes Wort zählt, sprich, jedes Wort einzeln in die Liste aufnimmt?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

duodiscus hat geschrieben:Aber wie kann ich das ändern, das er jedes Wort zählt, sprich, jedes Wort einzeln in die Liste aufnimmt?
Du musst den Eingangsstring aufteilen bzw. splitten (Englisch "to split"). Kam bei snafu schon vor ;-)

Schau doch einfach mal in die Doku und das Tutorial! Zudem probiere solche kleine Dinge direkt in einer Python-Shell aus. Da kannst Du schnell mit Strings exoerimentieren; wenn Du alle Einzelteile verstanden hast, kannst Du diese immer noch in einem Editor in eine Funktion schreiben :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

Danke. Habe das Problem mit .strip und len lösen können.
Antworten