2015-06-24 0:19 GMT+01:00 Carpediem <i.carped...@tiscali.it>: > Ho seguito i passaggi uno ad uno anche con carta e penna, ho modificato il > codice più volte ma alla fine ottengo sempre lo stesso non voluto > risultato. Mi aiutate a capire?
Ciao, ti dirò dove secondo me stai sbagliando, anche se non conosco la roulette. E non solo ti dirò dove sbagli per l'errore che descrivi, ma per gli altri mille peccati capitali che hai commesso nel codice >:D ahahah > uscita_passe = 0 > uscita_manque = 0 > scommessa_semplice = ("passe","manque") > scommessa_passe = 0 > scommessa_manque = 0 > tutti_i_numeri = > (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24! > ,25,26,27,28,29,30,31,32,33,34,35,36) Se la roulette avesse avuto 10000 numeri cosa facevi, li elencavi uno per uno? :P Usa tuple(range(37)) anziché quell'elenco che hai scrtto. > passe = (19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36) > manque = (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18) Per questi usa tuple(range(19, 37)) e tuple(range(1, 19)). > liste_in_ritardo = [] > puntate_possibili = ("passe","manque","pari","dispari","nero","rosso","prima > dozzina","seconda dozzina","terza dozzina","prima colonna","seconda > colonna","terza colonna","prima sestina","seconda sestina","terz > a sestina","quarta sestina","quinta sestina","sesta sestina",\ > "settima sestina","ottava sestina","nona > sestina","decima sestina","undicesima sestina","quattro primi","carre > 1a5","carre 2a6","carre 4a8","carre 5a9","carre 7a11","carre 8a12","carre > 10a14","carre 11a15","carre 13a17","carre 14a18","carre 16a20","carre > 17a21",\ > "carre 19a23","carre 20a24","carre 22a26","carre > 23a27","carre 25a29","carre 26a30","carre 28a32","carre 29a33","carre > 31a35","carre 32a36") Questa sfilza di stringhe potresti formattarla meglio, come ad esempio puntate_possibili = ( "passe", "manque", "pari", "dispari", "nero", "rosso", "prima ecc, anche se esce una cosa lunghissima, personalmente preferisco un codice più lungo e leggibile che di qualche riga in meno e che mi fa incrociare gli occhi. > print("Attenzione: stiamo facendo riferimento alle regole della Roulette > francese.") > print("Si presuppone, come previsto ad esempio al Casino' di Venezia, che la > puntata minima accettata \nsia di 10 Euro e la massima di 600. Si ritiene > scontato, inoltre, che il giocatore\nsegua rigorosamente i suggerimenti che > verranno evidenziati dal programma.") > print() Ho notato che usi un sacco di print(); non voglio dirti che è una cosa brutta, ma personalmente non mi piace mischiare gli stili: o usi una print per ogni riga, o usi \n in una print sola. Io andrei di una print per ogni riga. Ti consiglio, molto umilmente, di adottare uno stile ed essere coerente ad esso. > capitale_disponibile = eval(input("Per cominciare, indicami l'importo che > intendi mettere a disposizione per il gioco (si consiglia almeno 2500 Euro)" > )) eval(input()) è una cosa che vuoi evitare quasi sempre. Non usarlo. Usa int(input()) se vuoi ottenere un intero oppure usa usa ast.literal_eval(input()). https://docs.python.org/3/library/ast.html#ast.literal_eval > print("Giocata"+((" ")*17),"ritardi di uscita"+((" ")*6),"Giocata"+((" > ")*17),"ritardi di uscita"+((" ")*8)) Esistono opzioni migliori per formattare "incolonnando". Esempio: print('Valore: {:12} Valore {:8}'.format(4, 123)) Usa format() e tutte le sue belle opzionI: https://docs.python.org/3.3/library/string.html#formatstrings > if numero_uscito in passe: Se passe e manque e tutti_i_numeri li usi solo per tenere elenchi di numeri, puoi fare 2 cose per migliorare il tuo codice: 1. usare set() anziché tuple(). Set è molto più veloce per vedere se un elemento è al suo interno, rispetto a tuple, e la sintassi "valore in insieme" è invariata e molto gradevole da leggere. Quindi, anziché usare tuple(range(37)), usa set(range(37)). Se, invece, la tupla ti serve perché è ordinata (set non preserva l'ordine), allora tieni la tupla. 2. Se hai degli intervalli numerici e devi verificare se sei in tali intervalli, non usare né tuple né set. Usa gli operatori <=, e magari definisci un paio di funzioni per leggere meglio: def in_passe(n): return 19 <= n <= 36 if in_passe(numero_uscito): etc > uscita_manque =+1 E questa riga credo sia l'origine del tuo baco. Più volte nel codice scrivi variabile =+1 e secondo me tu stai cercando di ottenere variabile = variabile + 1 ma forse non sai, o non ti sei accorto, che l'operatore += è ben diverso dai due operatori =+. a += b vuol dire a = a + b a =+ b vuol dire a = (+b) cioé a = b (+ indica il segno del numero). > prosegui_gioco = input("Vuoi continuare a giocare? si/no ") > if prosegui_gioco == "si": ultimo appunto: in genere è buona cosa fare controllo indipendenti dalle maiuscole e dalle minuscole. Quindi: prosegui_gioco = input('Blah").lower() così se l'utente inserisce SI o Si, il codice funziona comunque e non è necessario scrivere tutto in minuscolo. Spero di averti risolto il problema e ti averti dato qualche dritta :P Ciauz ~Ale _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python