strip, split - mehrere Argumente

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.
Yuzuke
User
Beiträge: 10
Registriert: Dienstag 6. Juli 2010, 12:38

Danke für die vielen Antworten, aber spricht eigentlich was dagegen meine Lösung beizubehalten, da ich durch meinen Code wohl am besten durchblicke, oder spricht irgendwas dagegen, solange es funktioniert?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.
Yuzuke hat geschrieben:Danke für die vielen Antworten, aber spricht eigentlich was dagegen meine Lösung beizubehalten, da ich durch meinen Code wohl am besten durchblicke, oder spricht irgendwas dagegen, solange es funktioniert?
Das kommt ganz darauf an, ob du etwas lernen willst oder nicht ;-) Wenn man deine Lösung retten will, dann könnte man es so machen:

Code: Alles auswählen

if value.find("+") >= 0:
    modifier = "+"
elif String.find("-") >= 0:
    modifier = "-"
else:
    modifier = None
        
if modifier is not None:
    until = value.find(modifier)
    number = int(value[until+1:])
    value = value[:until]

until = value.find("W")
counter = int(value[:until])
dice = int(value[until+1:])

damage = sum(random.randint(1, dice) for _ in range(counter))

if modifier is not None:
    if modifier == "+":
        damage += number
    elif modifier == "-":
        damge -= number

return max(0, damage)
Und da ist bei weitem noch nicht alles zusammengefasst.

Und schau dir doch bitte mal PEP8 an. Wenn man eine Sprache verwendet - und besonders wenn man Hilfe von anderen in Anspruch nimmt - dann sollte man sich an gewisse Standards halten. Das macht es für beide Seiten einfacher.

Bis dann,
Sebastian
Das Leben ist wie ein Tennisball.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

@EyDu: Ich bin gerade verwirrt. Habe ich etwas nicht mitbekommen?

Code: Alles auswählen

if value.find("+")  >= 0:
    modifier = "+"
elif String.find("-") >= 0:
    modifier = "-"
else:
    modifier = None
Warum nicht '+' in value?
[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]
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

jbs hat geschrieben:Warum nicht '+' in value?
Das hat der Schlafmangel beschlossen. Es sollte natürlich in verwendet werden.

Oder man verwendet den Index anstatt ein zweites Mal zu suchen. Macht den Code aber nicht wirklich besser.
Das Leben ist wie ein Tennisball.
Benutzeravatar
pillmuncher
User
Beiträge: 1530
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Yuzuke hat geschrieben:spricht irgendwas dagegen, solange es funktioniert?
Eine Lösung sollte das Problem widerspiegeln, das sie löst. Aus deinem Code wird erst nach längerem Überlegen deutlich, welche Strings akzeptiert und welche Ausgaben erzeugt werden. Bei mir steht schon ziemlich am Anfang ein regulärer Ausdruck, der deutlich macht, worum es geht.

Bei dir gibt es 6 if-Statements, bei mir nur ein einziges und das ist bloß zur Ausnahmebehandlung. Dadurch muss man beim Lesen nur in eine Richtung denken und nicht verschiedene Ablaufwege im Kopf behalten. Bei mir gibt es 7 Zuweisungen, bei dir 20. Du modifizierst deine Variablen, so dass sie zu unterschiedlichen Zeiten unterschiedliche Werte annehmen, ich dagegen weise meinen Variablen Werte zu, die dann gleich bleiben. In der Funktionalen und Logischen Programmierung nennt man das referentielle Transparenz. Das ist etwas gutes, weil man so dem zeitlichen Ablauf weniger Aufmerksamkeit schenken muss. Man muss sich nur überlegen, welche Daten wann zur Verfügung stehen müssen, und arrangiert die Zuweisungen entsprechend.

Wenn ich es mir recht überlege, habe ich ein Scheme-Programm geschrieben :wink:

Gruß,
Mick.
In specifications, Murphy's Law supersedes Ohm's.
Antworten