HILFE BEI SCHULAUFGABE

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.
falcon1806
User
Beiträge: 6
Registriert: Freitag 19. Februar 2010, 23:05

hallo zusammen,
ich bin in der schule im 2. semester und komm bei einer aufgabe in informatik nicht weiter.
die aufgabe ist, ein parser zu schreiben der wörter nach bestimmten kriterien überprüft.

KRITERIEN sind (EBNF-NOTATION):
1. A ::= "a"...."z" kleine buchstaben
2. B ::= "A"..."Z" große buchstaben
3. C::= A{A} mögliche Folge von kleinen Buchstaben
4. D::= C mögliche Folge von Kleinbuchstaben mit
Großbuchstaben am anfang

=>zusammengefasst:
die wörter können aus einem kleinbuchstaben,
folge von kleinbuchstaben
oder großbuchstaben mit einer folge von kleinbuchstaben


Hier mein python skript:

Code: Alles auswählen

x=raw_input("Geben Sie ein Wort ein ")

kl=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
gr=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]

anz=len(x)


if anz==0:                                          # keine Buchstaben                                      
    print "Syntaxfehler"

elif anz==1:                                        # ein Buchstabe
    for i in range (0,27):
        if x == gr[i]:
            print "Syntaxfehler"
            break
        if x == kl[i]:
            print "Wort zulaessig"
            break
        
else:                                               # mehr als ein Buchstabe
    for i in range (0,27):
        if x[0] == gr[i]:                           # wenn erster Buchstabe groß ist...
            j=0
            for j in range(1,anz+1):                # wird ab 2. Buchstaben überprüft...
                if x[j] == gr[i]:                   # ob ein großer Buchstabe vorkommt
                    print "Syntaxfehler"
                    j=j+1
                    
            
                if x[j] == kl[i]:                   # ob ein kleiner Buchstabe vorkommt
                    print "Wort zulaessig"
                    j=j+1
                
        if x[0] == kl[i]:                           # wenn erster Buchstabe klein ist...
            j=0
            for j in range(1,anz+1):                # wird ab 2. Buchstaben überprüft...
                if x[j] == kl[i]:                   # ob ein kleiner Buchstabe vorkommt
                    print "Wort zulaessig"
                    j=j+1
Mein problem:
mit einem buchstaben funzt es. MIT MEHREREN BUCHSTABEN GIBT ES NOCH PROBLEME.......BEI EINER FOLGE VON GROßBUCHSTABEN ZEIGT ER MIR "WORT ZULÄSSIG" AN!!! Es müsste aber "SYNTAXFEHLER" stehen.....WO IST DAS PROBLEM???

wäre sehr dankbar für eure hilfe
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Lies dir mal das python-Tutorial zu Strings durch.
Da gibt es ein paar Funktionen die mit is anfangen.
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

Und aus der Rubrik "Wie erschrecke ich einen Anfänger?": :twisted:

Code: Alles auswählen

#! /usr/bin/python2.6
# coding:utf-8

import string

class InvalidInput(Exception):
    """Eigene Ausnahme, zur Fehlermeldung/-behandlung"""
    pass

LOWER = set(string.ascii_lowercase) # string.ascii_xxx ist bloß ein string: "abcdef..."
UPPER = set(string.ascii_uppercase)

data = raw_input("Geben Sie ein Wort ein: ")
try:
    if not data or data[0] not in LOWER | UPPER:
        raise InvalidInput()
    for c in data[1:]:
        if c not in LOWER:
            raise InvalidInput()
    #alternativ:
    #if set(data[1:]) - LOWER:
    #    raise InvalidInput()
    print "\"{0}\" ist ein Wort".format(data)
except InvalidInput:
    print "\"{0!r}\" ist kein Wort".format(data)
Ein "re.match(r"^[A-Za-z][a-z]*$", data)" gibt's ja auch noch - aber das ist wohl nicht Sinn der Übung.
scnr, Jörg
edit: Ja, ich hab gerade zu viel Zeit
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

@falcon1806: Der Hinweis auf das Tutorial hat einen ganz einfachen Grund: Du fragst nach Grundlagen. Dir hier fertige Lösungen zu präsentieren ist nicht Sinn und Zweck des Forums.
Siehe dazu auch : [wiki=Forum/Regeln]Forum-Regeln[/wiki] und An alle Schüler und Studenten mit Informatikproblemen

@b.esser-wisser: Böser Junge :wink:
Zuletzt geändert von querdenker am Samstag 20. Februar 2010, 11:54, insgesamt 1-mal geändert.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

falcon1806, gib doch mal "-" ein und schaue, wie dein Programm bricht :)

Aus Spass an der Freude habe ich noch http://paste.pocoo.org/show/180419/ zusammengestellt. Vielleicht hilft's.

Stefan
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

@sma:

Code: Alles auswählen

all(c.islower() for c in t)
entspricht doch einfach

Code: Alles auswählen

t.islower()
Damit erübrigen sich auch viele der anderen Konstrukte.
MfG
HWK
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Stimmt. Wie dumm von mir. Und ich schrieb's ja auch noch selbst :)

Stefan
falcon1806
User
Beiträge: 6
Registriert: Freitag 19. Februar 2010, 23:05

vielen dank erstmal für die vielen antworten.

leider helfen sie mir nicht wirklich weiter.
ich denke, dass ich die grundlagen schon kenne....nur sowas wie re.match oder so sagt mir gar nichts und das ist wie schon erwähnt nicht siin der aufgabe.ich soll mit den gängigen befehlen arbeiten.....

hat es jemand schon mal ausprobiert?
MEINE FRAGE IST: WO steckt der fehler in diesem "skript" und wie löse ich das....und zwar so dass er mir, wenn ich eine folge von großbuchstaben eingebe, "syntaxfehler" ausgeben soll.

es dürfen nur wörter zulässig sein, die die kriterien erfüllen.

ICH BRAUCH HILFE!!!
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Hast du dir smas Link schon angeschaut?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

falcon1806 hat geschrieben:ICH BRAUCH HILFE!!!
Großbuchstaben und viele Ausrufezeichen helfen nicht. Verärgert höchstens. Dass du Hilfe brauchst, hast du ja oben schon geschrieben.

Den ausgelagerten Code von sma hast du nicht angeschaut, richtig?
Was willst du mehr: Einen ganzen Haufen an Lösungen, schön dokumentiert und darunter ausreichend viele, die mit ganz grundlegenden Python-Elementen auskommen. Und das alles kostenlos!
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Da gibts re.match :arrow: [mod]re[/mod]
the more they change the more they stay the same
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Dav1d hat geschrieben:Da gibts re.match :arrow: [mod]re[/mod]
Das nützt ihm doch nix. Er soll es doch mit den Mitteln lösen, die bisher im Unterricht behandelt wurden. In smas Sammlung findet sich aber ganz sicher mehr als eine Lösung, die (auch in dieser Hinsicht) geeignet ist.
falcon1806
User
Beiträge: 6
Registriert: Freitag 19. Februar 2010, 23:05

ok.......ich hab mir das von sma angesehen....und hab einige fragen...

1. sma hat viele funktionen namens check(s) vorgestellt. wenn ich das richtig verstehe, dann erfüllen alle dieselbe funktion (es sind nur verschiedene variationen)....richtig??

2. ich beziehe mich mal auf die zweite variante (zeile 26).
so.....was bedeutet eig. diese zeile?

Code: Alles auswählen

return s != ""
was wird hier returned? wozu dient das?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

falcon1806 hat geschrieben:

Code: Alles auswählen

return s != ""
was wird hier returned? wozu dient das?
Öffne eine Python Shell und probier es aus.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Probier es doch mal aus...

@sma: Ist bool(s) nicht besser?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
falcon1806
User
Beiträge: 6
Registriert: Freitag 19. Februar 2010, 23:05

hab ich schon ausprobiert...
es passiert nix......
man muss die funktion in ein Hauptprogramm binden, oder?(aber wie?)

und kann jemand was zu der zeile sagen, wenns geht
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Code: Alles auswählen

>>> 'a' != ''
True
Und dann rate mal, was der dann zurückgibt.


Edit: Ich denke das Turorial ist noch etwas für dich (siehe Signatur)
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
falcon1806
User
Beiträge: 6
Registriert: Freitag 19. Februar 2010, 23:05

wie binde ich das in ein hauptprogramm ein?
etwa in dieser art:

Code: Alles auswählen

x=raw_input("Wort: ")

check(x)
und dann noch sowas wie:
if True---> wort zulässig
else--->syntaxfehler

wegen der zeile.......was bedeutet sie wortwörtlich?
s ungleich "" <----- wofür stehen die anführungszeichen?

und bitte nicht wieder ein verweis auf das tutorial....hab wirklich nicht die zeit mir mal ein tutorial rein zu ziehen...es geht mir einfach um die logik und grundidee (wie kommt man auf sowas??)
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

falcon1806 hat geschrieben:....hab wirklich nicht die zeit mir mal ein tutorial rein zu ziehen...
Deine momentane Herangehensweise wird Dich noch viel mehr Zeit kosten. Bei den völlig fehlenden Grundlagen kann und wird Dir wohl keiner mehr helfen.
MfG
HWK
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

falcon1806 hat geschrieben:...und bitte nicht wieder ein verweis auf das tutorial....hab wirklich nicht die zeit mir mal ein tutorial rein zu ziehen...es geht mir einfach um die logik und grundidee (wie kommt man auf sowas??)


Das mit dem Tutorial hat HWK schon völlig zutreffend beantwortet. Und wie man auf die Lösungen kommt - nun, man beschäftigt sich mit python und benutzt diese Masse von circa einem bis anderthalb Kilo, die hinter den Augen liegt.

Irgendwann kommt man mit cheaten halt nicht mehr weiter - hier scheint vorerst deine Endstation zu sein.
Antworten