Seite 1 von 1

Längere if-Anweisung optimieren

Verfasst: Dienstag 8. März 2011, 10:03
von mkeil
Hallo,

wie könnte ich folgende Anweisung optimieren: http://www.python-forum.de/pastebin.php?mode=view&s=165
Ich finde das alles.. sehr lang, geht bestimmt auch kürzer. Je nach Operator sollen andere Werte für eine Aufgabe genutzt werden.
Aber ich denke der Code erklärt sich von selbst, ich bin ja noch ein blutiger Anfänger und er ist nicht so kompliziert :)

Grüße
mkeil

Re: Längere if-Anweisung optimieren

Verfasst: Dienstag 8. März 2011, 10:16
von .robert
nur mal so als Inspiration:

Code: Alles auswählen

import random
from operator import add, sub, mul, div

op = (add, sub, mul, div)[random.randint(0,3)]
print op(37,15)

Re: Längere if-Anweisung optimieren

Verfasst: Dienstag 8. März 2011, 10:21
von EyDu
Oder um Indizes aus dem Weg zu gehen:

Code: Alles auswählen

>>> import operator
>>> import random
>>> spam = {"+":operator.add, "-":operator.sub, "*":operator.mul, "/":operator.div}
>>> spam[random.choice("+-*/")](42.0, 23.0)
1.826086956521739
>>> spam[random.choice("+-*/")](42.0, 23.0)
966.0
>>> spam[random.choice("+-*/")](42.0, 23.0)
19.0
>>> spam[random.choice("+-*/")](42.0, 23.0)
1.826086956521739
>>> spam[random.choice("+-*/")](42.0, 23.0)
966.0
>>> spam[random.choice("+-*/")](42.0, 23.0)
65.0

Re: Längere if-Anweisung optimieren

Verfasst: Dienstag 8. März 2011, 11:11
von BlackJack
Mal unter der Annahme, dass der Name `rand` nach dem "if" nicht mehr von interesse ist/war und ungetestet:

Code: Alles auswählen

        operations = [
            ('+', add, (1, 20), (1, 20)),
            ('-', sub, (20, 40), (1, 20)),
            ('/', div, (11,20), (1, 10)),
            ('*', mul, (1, 10), (1, 10)),
        ]

        # ...

        op, func, a_range, b_range = random.choice(operations)
        a = random.randint(*a_range)
        b = random.randint(*b_range)
        c = func(a, b)
`add()`, `mul()`, … sind aus dem `operator`-Modul

Re: Längere if-Anweisung optimieren

Verfasst: Dienstag 8. März 2011, 11:12
von sma
Und warum nicht beide Ansätze kombinieren?

Code: Alles auswählen

from random import choice
from operator import add, sub, mul, div
choice((add, sub, mul, div))(42, 23)
Stefan

Re: Längere if-Anweisung optimieren

Verfasst: Dienstag 8. März 2011, 20:49
von mkeil
Danke für Eure Antworten!
Vielleicht warte ich dann doch noch etwas, die Lösungen verstehe ich (noch) nicht.
Bin ja noch ziemlich am Anfang :)


Marcel

Re: Längere if-Anweisung optimieren

Verfasst: Mittwoch 9. März 2011, 13:34
von Nebelhom
Ich fuehle mich gerade unheimlich doof. Wie kommt ihr von dem urspruenglich angegeben code im pastebin mit den verschiedenen zahlen intervallen fuer die random.randint methode zu den zahlen (42, 23)?

Steh ich gerade spektakulaer auf dem Schlauch oder ist das hoehere Mathematik fuer jemanden ohne Abschluss in Mathematik oder Informatik?

Re: Längere if-Anweisung optimieren

Verfasst: Mittwoch 9. März 2011, 13:36
von EyDu
Das sind einfach nur Beispielzahlen um dir auch noch etwas Code zu überlassen ;-) Am besten befragst du Google einmal nach 42.