Re: strip, split - mehrere Argumente
Verfasst: Montag 19. Juli 2010, 17:13
Ich weiß ja nicht, ob es wirklich ums Würfeln geht, aber 2008 hatte ich mal http://python-forum.de/viewtopic.php?p=114705 implementiert.
Stefan
Stefan
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
import random
def Damage(wurfzahl, seitenzahl, zusatz):
erg = 0
for x in range(wurfzahl):
erg += random.randint(1, seitenzahl + 1) #kA ob das so richtig ist, jedenfalls soll eine Zahl "auf dem Würfel" gewählt werden...
erg += zusatz
return erg
def StringDamage(string):
temp = string.split("W")
if "+" in temp[1]:
temp2 = temp[1].split("+")
else:
temp2 = temp[1].split("-")
wurfzahl = int(temp[0])
seitenzahl = int(temp2[0])
zusatz = int(temp2[1])
return Damage(wurfzahlm seitenzahl, zusatz)
if __name__ == "__main__":
print Damage(3, 6, -4)
print Damage(4, 18, 22)
print StringDamage("3W12-9")
print StringDamage("2W6+8")
Deiner ist ca. 2/3 von meinem. Dafür hast du keine Fehlerbehandlung. Außerdem addierst du den Zusatz sogar wenn '-' davor steht.Shaldy hat geschrieben:Ähhh, hab ich das Problem nicht verstanden oder habt ihr alle einfach nur Spaß an ellenlangem Code?
Das selbe könnte man dich fragenShaldy hat geschrieben:Ähhh, hab ich das Problem nicht verstanden oder habt ihr alle einfach nur Spaß an ellenlangem Code?
Code: Alles auswählen
import random
import re
def damage(wurfzahl, seitenzahl, zusatz):
return zusatz + sum(random.randint(1, seitenzahl + 1)
for _ in range(wurfzahl))
def string_damage(s):
wurfzahl, temp = s.split("W")
seitenzahl, zusatz = re.split("[+-]", temp)
return damage(*map(int, (wurfzahl, seitenzahl, zusatz)))
Das kommt ganz darauf an, ob du etwas lernen willst oder nichtYuzuke 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?
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)
Code: Alles auswählen
if value.find("+") >= 0:
modifier = "+"
elif String.find("-") >= 0:
modifier = "-"
else:
modifier = None
Das hat der Schlafmangel beschlossen. Es sollte natürlich in verwendet werden.jbs hat geschrieben:Warum nicht '+' in value?
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.Yuzuke hat geschrieben:spricht irgendwas dagegen, solange es funktioniert?