Längere if-Anweisung optimieren

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
mkeil
User
Beiträge: 11
Registriert: Samstag 26. Februar 2011, 21:04

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
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

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)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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
Das Leben ist wie ein Tennisball.
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
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
mkeil
User
Beiträge: 11
Registriert: Samstag 26. Februar 2011, 21:04

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
Nebelhom
User
Beiträge: 155
Registriert: Mittwoch 19. Mai 2010, 01:31

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?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Das sind einfach nur Beispielzahlen um dir auch noch etwas Code zu überlassen ;-) Am besten befragst du Google einmal nach 42.
Das Leben ist wie ein Tennisball.
Antworten