python programmierung

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
Kranioklast
User
Beiträge: 14
Registriert: Dienstag 9. November 2004, 20:56
Wohnort: Berlin

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!
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

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

Gruß, mawe
Kranioklast
User
Beiträge: 14
Registriert: Dienstag 9. November 2004, 20:56
Wohnort: Berlin

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!!
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
[code]#!/usr/bin/env python
import this[/code]
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.
Kranioklast
User
Beiträge: 14
Registriert: Dienstag 9. November 2004, 20:56
Wohnort: Berlin

Gast war ich :D :D
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Zuletzt geändert von Dookie am Mittwoch 10. November 2004, 00:02, insgesamt 1-mal geändert.
[code]#!/usr/bin/env python
import this[/code]
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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

:oops: da is ein , zu viel in der zeile, einfach den "," löschen am Ende dann klappts.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
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.
Gast

Ich bin übrigens kein Informatik-Student, sondern Schüler.
:D
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

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
Michael Euteneuer
User
Beiträge: 9
Registriert: Mittwoch 7. Januar 2004, 16:36

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
[code]#!/usr/bin/env python
import this[/code]
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi Dookie!
Dookie hat geschrieben: warum erst in eine Liste wandeln?
Cool! Das wusste ich noch nicht :wink:

Gruß, mawe
Kranioklast
User
Beiträge: 14
Registriert: Dienstag 9. November 2004, 20:56
Wohnort: Berlin

Ja, Hausaufgaben sind Hausaufgaben, hast ja Recht.
Danke für die Alternativen!
Antworten