Seite 1 von 2

HILFE BEI SCHULAUFGABE

Verfasst: Samstag 20. Februar 2010, 08:20
von falcon1806
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

Verfasst: Samstag 20. Februar 2010, 08:50
von querdenker
Lies dir mal das python-Tutorial zu Strings durch.
Da gibt es ein paar Funktionen die mit is anfangen.

Verfasst: Samstag 20. Februar 2010, 09:52
von b.esser-wisser
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

Verfasst: Samstag 20. Februar 2010, 11:50
von querdenker
@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:

Verfasst: Samstag 20. Februar 2010, 11:53
von sma
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

Verfasst: Samstag 20. Februar 2010, 13:39
von HWK
@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

Verfasst: Samstag 20. Februar 2010, 13:43
von sma
Stimmt. Wie dumm von mir. Und ich schrieb's ja auch noch selbst :)

Stefan

Verfasst: Samstag 20. Februar 2010, 14:20
von falcon1806
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!!!

Verfasst: Samstag 20. Februar 2010, 14:33
von jbs
Hast du dir smas Link schon angeschaut?

Verfasst: Samstag 20. Februar 2010, 14:34
von numerix
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!

Verfasst: Samstag 20. Februar 2010, 15:01
von Dav1d
Da gibts re.match :arrow: [mod]re[/mod]

Verfasst: Samstag 20. Februar 2010, 15:13
von numerix
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.

Verfasst: Samstag 20. Februar 2010, 15:14
von falcon1806
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?

Verfasst: Samstag 20. Februar 2010, 15:22
von DasIch
falcon1806 hat geschrieben:

Code: Alles auswählen

return s != ""
was wird hier returned? wozu dient das?
Öffne eine Python Shell und probier es aus.

Verfasst: Samstag 20. Februar 2010, 15:23
von jbs
Probier es doch mal aus...

@sma: Ist bool(s) nicht besser?

Verfasst: Samstag 20. Februar 2010, 15:26
von falcon1806
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

Verfasst: Samstag 20. Februar 2010, 15:29
von jbs

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)

Verfasst: Samstag 20. Februar 2010, 15:56
von falcon1806
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??)

Verfasst: Samstag 20. Februar 2010, 16:03
von HWK
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

Verfasst: Samstag 20. Februar 2010, 16:24
von querdenker
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.