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
strip, split - mehrere Argumente
Ähhh, hab ich das Problem nicht verstanden oder habt ihr alle einfach nur Spaß an ellenlangem Code?
Ungetestet
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")
Dies ist keine Signatur!
- pillmuncher
- User
- Beiträge: 1484
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
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?
Gruß,
Mick.
In specifications, Murphy's Law supersedes Ohm's.
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 Leben ist wie ein Tennisball.
Hallo.
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 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: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?
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 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.
@EyDu: Ich bin gerade verwirrt. Habe ich etwas nicht mitbekommen?
Warum nicht '+' in value?
Code: Alles auswählen
if value.find("+") >= 0:
modifier = "+"
elif String.find("-") >= 0:
modifier = "-"
else:
modifier = None
[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]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Das hat der Schlafmangel beschlossen. Es sollte natürlich in verwendet werden.jbs hat geschrieben:Warum nicht '+' in value?
Oder man verwendet den Index anstatt ein zweites Mal zu suchen. Macht den Code aber nicht wirklich besser.
Das Leben ist wie ein Tennisball.
- pillmuncher
- User
- Beiträge: 1484
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
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?
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
Gruß,
Mick.
In specifications, Murphy's Law supersedes Ohm's.