from random import randint from math import sin, radians class monnaie: def __init__(self,dx,a,b): self.pos = 0 self.dx = dx self.a = a self.b = b def maj(self): self.histo = self.prix() self.pos += randint(-self.dx,self.dx) def prix(self): return self.a * sin(radians(self.pos)) + self.b class joueur: def __init__(self,bk = 1000,pf = {}): self.bk = bk self.pf = pf def achatVente(self,montant,crypto,cm): try: if montant == 0: print("Vous attendez") return if 0 < montant <= self.bk: if crypto in self.pf.keys(): self.pf[crypto] += montant / cm[crypto].prix() else: self.pf[crypto] = montant / cm[crypto].prix() self.bk -= montant return if montant < 0 and crypto in self.pf.keys(): if self.pf[crypto] * cm[crypto].prix() >= abs(montant): self.pf[crypto] += montant / cm[crypto].prix() self.bk -= montant return except: pass print("Impossible !") def montantPf(joueur,cm): s = joueur.bk for nom in joueur.pf.keys(): s += joueur.pf[nom] * cm[nom].prix() return s def majMarche(cm,jour): print("--- JOUR {} ---".format(jour)) for nom in cm.keys(): cm[nom].maj() print('{}:{:.2f} ({:.2f})'.format(nom,cm[nom].prix(),cm[nom].histo)) def demandeAction(): c = None v = input("Montant : ") try: v = float(v) except ValueError: v = 0 if v != 0: c = input("Quel crypto ? : ") return [v,c] def affInfos(joueur,cm): print("-- PORTEFEUILLE --") print("Banque: {:.2f}".format(joueur.bk)) for nom in joueur.pf.keys(): print("{}: {:.2f}".format(nom,joueur.pf[nom] * cm[nom].prix())) print("Total: {:.2f}".format(montantPf(joueur,cm))) def msgFinal(joueur, cm): total = montantPf(joueur,cm) print('Total (EUR): {}'.format(total)) def initCm(noms): marche = {} for nom in noms: dx = randint(5,40) a = randint(2,6) b = a + randint(1, 5) marche[nom] = monnaie(dx,a,b) return marche nomsCm = ['btc','bat'] def jeu(): jour = 1 j1 = joueur() cm = initCm(nomsCm) while jour < 31: majMarche(cm,jour) affInfos(j1,cm) [montant,crypto] = demandeAction() j1.achatVente(montant,crypto,cm) jour += 1 msgFinal(j1, cm) jeu()