Seite 2 von 9

Verfasst: Montag 5. Januar 2009, 00:56
von derdon

Verfasst: Montag 5. Januar 2009, 00:57
von DasIch
dynasty-warriors hat geschrieben:p.s. was ist tryexcept??
Tritt bei der Ausführung eine Exception auf kann man diese Abfangen indem man sie mit try except umschliesst.

Code: Alles auswählen

try:
    raise Exception
    print 'ich werde nie ausgefuehrt'
except Exception:
    print 'abgefangen'

Verfasst: Montag 5. Januar 2009, 01:00
von nkoehring
dynasty-warriors hat geschrieben:ôk vielen dank! ich habe jetzt das thema mit random verrstanden!!! vielen dank!!!


p.s. was ist tryexcept??
Ah du entwickelst tatsaechlich Interesse? Dann bin ich gern bereit zu helfen. Try-Except-Konstrukte verwendet man um Fehler (genauer: Exceptions) abzufangen.

Wenn der User zB keine Zahl sondern einen Text eingibt, kann bei bestimmten Operationen ein Fehler auftreten.

Beispiel:

Code: Alles auswählen

In [29]: x = input("I moag ne Zahl ham! ")
I moag ne Zahl ham! k
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)

/home/psy/<ipython console> in <module>()

/home/psy/<string> in <module>()

NameError: name 'k' is not defined
...das Programm stuerzt also ab und das kann man abfangen:

Code: Alles auswählen

In [29]: try:
    x = input("I moag ne Zahl ham! ")
except NameError:
    print "Menno, i' will ne Zoahl, kee Buchstoab!"

I moag ne Zahl ham! k
Menno, i' will ne Zoahl, kee Buchstoab!

Verfasst: Montag 5. Januar 2009, 01:04
von derdon
Statt input() sollte man vor 3.0 raw_input() verwenden. input() ist das gleiche wie

Code: Alles auswählen

eval(raw_input())
und überall, wo eval drinsteckt, ist etwas evil :twisted:

Verfasst: Montag 5. Januar 2009, 01:49
von Leonidas
DasIch hat geschrieben:Erinnert mich irgendwie an Lisp:
"Ich hab nicht nichtmal if benutzt!!!1111einseinself"
Weil man es auch komplizierter mit ``cond`` machen kann?

Verfasst: Montag 5. Januar 2009, 02:08
von DasIch
Wieso kompliziert?

Verfasst: Montag 5. Januar 2009, 02:23
von Leonidas
Wegen der hohen Anzahl von Klammern, die zusätzlich zu ``if``nötig sind wenn es sich um ein simples if-then-else handelt. Man macht in anderen Sprachen auch kein ``switch/case`` nur weil man damit ein simples ``if`` ersetzen kann.

Verfasst: Montag 5. Januar 2009, 02:26
von str1442
Vielleicht gibt der Benutzer auch mal "1j" ein.

Und cond, car, cdr & co > world ;)

@Thread: Schreib ordentlich und lern die SuFu zu benutzen (wobei die Anwendung jener vielleicht aufgrund der gewählten Bezeichnung eine Anwendung einer ähnlichen vorrausgehen muss), dann kannst du dir auch selbst in den Fuß schiessen ohne auf dich aufmerksam zu machen. Eigentlich ist es schon ziemlich bezeichnend, daß solche Threads immerwieder eröffnet werden, und zwar jedesmal mit ähnlichen Verhaltens und Ausdrucksweisen.

Verfasst: Montag 5. Januar 2009, 04:17
von DasIch
Leonidas hat geschrieben:Wegen der hohen Anzahl von Klammern, die zusätzlich zu ``if``nötig sind wenn es sich um ein simples if-then-else handelt.
Das macht es vielleicht komplex oder bläht dass ganze(im Vergleich) auf aber kompliziert wird es dadurch nicht.
Bei einem Editor(z.B. Kate) mit brauchbarem Syntax Highlighting ist dass mit den Klammern auch kein Problem. Generell hat man dass nach einer Weile recht schnell gut drin, so gut dass ich schon dass ein oder andere mal erwischt habe bei Python die Klammer ebenfalls vor dem Funktionsnamen zu öffnen.

Letzendlich ist es natürlich dumm cond zu verwenden, wenn man nicht mehr braucht als if then else aber dass habe ich ja auch nicht bestritten. Ich fands nur seltsam cond kompliziert zu bezeichnen.

Verfasst: Montag 5. Januar 2009, 04:57
von nkoehring
Aber allgemein geht es hier ja sowieso nicht um Lisp, sondern um eine einfach loesbare Python-Aufgabe 8)

Verfasst: Montag 5. Januar 2009, 09:06
von audax

Verfasst: Montag 5. Januar 2009, 09:39
von BlackJack
Nein, kein Lisp. Aber vielleicht Factor. :-)

Code: Alles auswählen

#! /usr/bin/env factor
USING: combinators io kernel math math.order math.parser math.ranges random ;
IN: number-guessing

: ask-for-number ( -- n )  "Your guess: " write flush  readln string>number ;

: check-guess ( secret guess -- ? )
    over <=>
    { { +eq+ [ t "correct" ] }
      { +lt+ [ f "smaller" ] }
      { +gt+ [ f "greater" ] } } case
    "Your guess is " write write "." print ;

: loop ( n secret -- n )
    over number>string write ". try." print
    ask-for-number
    check-guess
    [ drop ] [ [ 1+ ] dip loop ] if ;

: main ( -- )
    1  100 [1,b] random  loop
    "Yeah!  You found it with " write  number>string write  " tries." print ;

main

Verfasst: Montag 5. Januar 2009, 10:32
von apollo13
@dynasty-warriors:
Du könntest auch "Python für Kids" lesen: http://www.amazon.de/Python-f%C3%BCr-Ki ... 827&sr=8-3

Das ist so geschrieben, dass sogar du es verstehen solltest.
Und es ist jedem hier egal, ob du auf deine Mutter schwörst, dieses Forum zu besuchen: Wir könnten darauf verzichten...

Verfasst: Montag 5. Januar 2009, 10:42
von audax
word.

Verfasst: Montag 5. Januar 2009, 11:18
von Leonidas
audax hat geschrieben:kein Lisp? Schade...
http://paste.pocoo.org/show/98039/
Mal aus meiner Sandbox rausgeholt. Irgendwie mag hier niemand Common Lisp sonderlich ;)

Und DasIch, ein Editor wie Kate ist als Lisp-Editor wenig geeignet. Ohne richtiges, semantisches Einrücken und farbliches Klammer-Level-Matching ist es vergleichsweise unangenehm zu programmieren.

Verfasst: Montag 5. Januar 2009, 13:28
von audax
Mal was anderes:
http://paste.pocoo.org/show/98060/

Immer nur Scheme ist ja auch doof...

Verfasst: Montag 5. Januar 2009, 13:33
von nemomuk
lol, immer wieder lustig solche Threads zu lesen^^

Verfasst: Montag 5. Januar 2009, 13:37
von INFACT
Wenn du eine Zufalls Zahl willst würde ich es Mit random probiern:

Code: Alles auswählen

import random
zahl=random.randint(1,100) #zufall zwischen 1 und 100
anzahl=1
while zahl != meineZahl:
    meineZahl=int(raw_input("Ich habe eine Zahl zwischen 1 und 100: rate "))
    if meineZahl==zahl:
        print "Richtig, die Zahl war", zahl , "Sehr gut, du hast es in", anzahl,"Versuchen geschafft"
    elif meineZahl<zahl:
        print"Sorry zu klein"
    elif meineZahl>zahl:
        print "Sorry zu gross"
    anzahl+=1
So jtz. stimmts gültig für python 2.5

Verfasst: Montag 5. Januar 2009, 13:48
von BlackVivi
INFACT hat geschrieben:

Code: Alles auswählen

import random
zahl=random.randint(1,100) #zufall zwischen 1 und 100
anzahl=1
while zahl != meineZahl:
    meineZahl=raw_input("Ich habe eine Zahl zwischen 1 und 100: rate ")
    if meineZahl==zahl:
        print ("Sehr gut, du hast es in"+anzahl+"Versuchen geschafft")
    elif meineZahl<zahl:
        print("Sorry zu klein")
    else:
        print("Sorry zu gross")
Mhm... hast du's ausprobiert vorher...? Es funktioniert soooo nicht. Außerdem... solltest du dich an PEP8 halten, finde ich. Also... naja, ich fänds schöner. meineZahl muss vorher'n Wert kriegen, sonst ist es schwer eine Überprüfung zu machen, außerdem sollte die Eingabe'n int werden, sonst bringen die Vergleiche danach stets ein "Sorry zu gross"

Verfasst: Montag 5. Januar 2009, 13:50
von Leonidas
Und was soll das sein? Python 2.x? Python 3.x?

@audax: Clojure?