| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- # -*- coding: utf-8 -*-
- """lancer de des"""
- from random import *
- from operator import add
- def de(faces):
- """resultat d'un de avec nbre de faces en parametre"""
- return randint(1,faces)
-
- def jet(expr):
- """effectue un jet de de a partir d'expressions de type '1d20+3' -
- retourne un resultat chiffre et un resultat detaille."""
- decoupage = lancer = []
- estDe = False
- nb = res = 0
- resDetaille = signe = tmp = ""
- #on decoupe la chaine en se basant sur tout ce qui n'est pas un chiffre:
- if expr:
- expr += " "
- for car in expr:
- try:
- #le caractere est-il un chiffre? si oui, on le stocke dans tmp
- tmp += str(int(car))
- except:
- #si ce n'est pas un chiffre, qu'est-ce?
- if car.lower() == "d":
- estDe = True
- nb = int(tmp)
- lancer = []
- tmp = ""
- #on garde en memoire le nombre stocke dans tmp,
- #puis on attend le prochain tmp pour effectuer le jet de de
- else:
- if estDe:
- #on lance le de
- i = 0
- while i < nb:
- lancer.append(de(int(tmp)))
- i+=1
- decoupage.append(lancer)
- decoupage.append(car)
- estDe = False
- tmp = ""
- else:
- decoupage.append(tmp)
- if car != " ":
- decoupage.append(car)
- tmp = ""
- decoupage.append(tmp)
- #on calcule ensuite tout ca:
- for elt in decoupage:
- if type(elt) == list:
- elt = int(sum(elt[:]))
- try:
- elt = int(elt)
- if signe == "-":
- elt = -1 * elt
- res += elt
- except:
- signe = elt
- #on met en forme le resultat detaille
- for elt in decoupage:
- if type(elt) == list:
- elt = map(str, elt)
- elt = ",".join(elt)
- resDetaille += " "+str(elt)
- resDetaille = resDetaille.replace(" ","")
-
- return (res, resDetaille)
- if __name__ == "__main__":
- # si lancement direct:
- while True:
- lancer = jet(raw_input(" > "))
- print("{} ({})".format(lancer[0], lancer[1]))
-
|