Seite 1 von 1

python programmierung

Verfasst: Dienstag 9. November 2004, 21:11
von Kranioklast
Hallo,

ich habe als Hausaufgabe ein Python-Programm zu schreiben und mich
dabei aufgeraucht, ich komme zu keiner Lösung.

Die Aufgabe lautet:
1. Eine Zeichenkette wird übergeben (z.B. "Auto"), geliefert
wird die Zeichenkette (zk) mit einem Leerzeichen
dazwischen (also: "A u t o"). Schreibe eine Prozedur!
2. Schreibe eine Prozedur "umgedreht", die zk wird in
umgedrehter Reihenfolge zurückgeliefert, also "otuA"!

Kann mir jemand helfen? Es wäre sehr nett!!
Danke im Voraus!

Verfasst: Dienstag 9. November 2004, 21:44
von mawe
Hi!

1. Lies bitte das :wink:
2. Zeig was Du bis jetzt versucht hast.

Gruß, mawe

Verfasst: Dienstag 9. November 2004, 21:55
von Kranioklast
Ja, kann verstehen, dass das nervt.
Mein Problem ist:
Ich weiß nicht, wie ich aus einem string die einzelnen Zeichen
herausbekomme. Ich bin ein absoluter Anfänger, der Kurs
läuft erst seit gut 3 Monaten.

Wenn ich wüsste, wie ich aus einem string jeden einzelnen
character herausbekomme, würde ich versuchen, sie einzeln
per print-Anweisung zu liefern und jeweils ein Leerzeichen
anzuhängen. Ist das der richtige Weg?


Mir würde ein guter Tipp reichen, muss ja nicht gleich
das ganze Programm sein!
Danke!!

Verfasst: Dienstag 9. November 2004, 22:04
von mawe
Hi!

Du kannst über einen String wie über eine Liste iterieren:

Code: Alles auswählen

for char in string:
   # mach irgendwas mit char
Kranioklast hat geschrieben: Ist das der richtige Weg?
Es ist ein Weg :wink:

Gruß, mawe

Verfasst: Dienstag 9. November 2004, 22:15
von Dookie
Hi Kranioklast,

Beide Probleme sind mit einigem Pythonwissen in je einer Programmzeile zu erledigen. Mit wenig Pythonwissen in je vier und mit garkeinem in maximal sechs, sofern man die Grundlagen der Programmierung kennt und schoneinmal ein Basicprogramm geschrieben hat.

Zu Problem 1:
Also du hast eine Zeichenkette z.B. "Auto", jetzt überlege dir wie du die in einzelne Zeichen zerlegen kannst dann hast du z.B. eine Liste ["A", "u", "t", "o"] jetzt brauchst du eigentlich nur noch die Liste wieder zu eine Zeichenkette zusammenzufügen mit je einem " " dazwischen. (tipp: Stringmethoden und spiel da mal mit der Methode join).

Zu Problem 2:
schau dir mal Strings an, da wird gezeigt wie mit Strings im Allgemeinen gearbeitet wird und auch wie auf einzelne Elemente eines Strings zugegriffen werden kann.

Gruß

Dookie


Gruß

Dookie

Verfasst: Dienstag 9. November 2004, 22:39
von Gast
Ok, danke, Problem 1 habe ich hinbekommen.

zk= 'Affe'
def gesperrt(zk):
"""\
Voraussetzung: "zk" ist eine Zeichenkette.
Effekt: Eine neue Zeichenkette ist geliefert, die den Text
von "zk" enthaelt, jedoch steht zwischen zwei Zeichen
ein Leerzeichen. Beispiel: Wenn der Text
"Affe" uebergeben wurde, so ist "A f f e" geliefert.
"""
for char in zk:
print char+' ',
gesperrt(zk)


Problem 2 ist mir noch nicht klar.

Bei "join" bekomme ich die Fehlermeldung, dass dieser
Name nicht definiert ist.
Leider ist mein Englisch nicht so gut, dass ich alles
in den Anweisungen verstehen konnte.
Ich probiere noch ein bisschen rum...
Danke für die Hilfe bisher.

Verfasst: Dienstag 9. November 2004, 22:46
von Kranioklast
Gast war ich :D :D

Verfasst: Dienstag 9. November 2004, 22:54
von Dookie
Hi nochmal.

es war ja die Rede von Zeichenkette zurückgeben, nicht ausgeben.
Das kannst Du so erreichen

Code: Alles auswählen

zk= 'Affe'
def gesperrt(zk):
    """
    Voraussetzung: "zk" ist eine Zeichenkette.
    Effekt: Eine neue Zeichenkette ist geliefert, die den Text
    von "zk" enthaelt, jedoch steht zwischen zwei Zeichen
    ein Leerzeichen. Beispiel: Wenn der Text
    "Affe" uebergeben wurde, so ist "A f f e" geliefert.
    """
    result = ""
    for char in zk:
        result = result+char+' '
    return result

print gesperrt(zk) 
Die Methode zum Umdrehen kannst Du aus der Gesperrtmethode entwickeln, dazu brauchst du nur eine Zeile zu ändern. Denk daran, du brauchst nur ein anderes Resultat "result".


Gruß

Dookie

Verfasst: Dienstag 9. November 2004, 23:21
von Gast
Wenn ich es so eingebe, bekomme ich die Fehlermeldung:

Traceback (most recent call last):
File "C:/python/gesperrt1.py", line 15, in -toplevel-
print gesperrt(zk)
File "C:/python/gesperrt1.py", line 12, in gesperrt
result = result+char+' ',
TypeError: can only concatenate tuple (not "str") to tuple

Mir qualmt der Kopf, ich probiere es morgen weiter...
Vielen Dank für die Hilfe! :D

Verfasst: Mittwoch 10. November 2004, 00:01
von Dookie
:oops: da is ein , zu viel in der zeile, einfach den "," löschen am Ende dann klappts.


Gruß

Dookie

Verfasst: Mittwoch 10. November 2004, 11:59
von Gast
Vielen Dank noch mal, ich hab das zweite Problem
jetzt auch hinbekommen, und zwar so:

Code: Alles auswählen

zk= 'Affe' 
laenge=len(zk)
def back(zk):  
    global laenge
    for x in range(laenge):
        laenge=laenge-1
        print zk[laenge],
back(zk)
Geht sicherlich auch eleganter, aber immerhin läufts.
Die Hinweise über den Umgang mit strings waren sehr hilfreich.

Verfasst: Mittwoch 10. November 2004, 12:17
von Gast
Ich bin übrigens kein Informatik-Student, sondern Schüler.
:D

Verfasst: Mittwoch 10. November 2004, 12:33
von mawe
Hi!

Hausaufgabe ist Hausaufgabe, egal ob Schüler od. Student :D
Naja, jetzt wo Du selbst auf eine Lösung gekommen bist, hier noch eine für das erste Problem (als Inspiration :D):

Code: Alles auswählen

zk = "Affe"
print " ".join(list(zk))
Gruß, mawe

Verfasst: Mittwoch 10. November 2004, 12:47
von Michael Euteneuer
Hi!
Ich wiederhole Dookie: Zurückgeben ist nicht ausgeben, also nicht mit print ausspucken, sondern eine Prozedur schreiben, die mit return das gewünschte zurückliefert. Wie in Dookies Beispiel. Statt die Zeichen auszugeben, speichere sie in einer Variablen. Ich denke mal, das war auch in Eurer Aufgabe gefordert.

Außerdem ein Tipp zu Deiner geposteten Lösung: Warum machst Du len(zk) außerhalb der Prozedur? Mach es innerhalb der Prozedur, dann sparst Du Dir das global und kannst die Prozedur später auch auf andere Zeichenketten anwenden, ohne immer wieder vorher noch die Länge der Zeichenkette zu bestimmen!

Gruß,
Michael

Verfasst: Mittwoch 10. November 2004, 13:46
von Dookie
Hi mave,

warum erst in eine Liste wandeln?

Code: Alles auswählen

zk = "Affe"
gesperrt = " ".join(zk)
print gesperrt
@Kranioklast:
zum 2. Problem

Code: Alles auswählen

zk = "Affe"
gedreht = zk[::-1]
print gedreht
Bei Python sind die Batterien eben schon dabei und für viele Probleme gibt es einfache/kurze Lösungen. Wobei deine Hausaufgabe nicht umsonst ist. Intern machen die beiden einzeiler das selbe wie Deine Funktionen.


Gruß

Dookie

Verfasst: Mittwoch 10. November 2004, 13:53
von mawe
Hi Dookie!
Dookie hat geschrieben: warum erst in eine Liste wandeln?
Cool! Das wusste ich noch nicht :wink:

Gruß, mawe

Verfasst: Mittwoch 10. November 2004, 14:33
von Kranioklast
Ja, Hausaufgaben sind Hausaufgaben, hast ja Recht.
Danke für die Alternativen!