Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo ThinkVision 3D 27, la steroscopia senza occhialini
Lenovo ThinkVision 3D 27, la steroscopia senza occhialini
Primo contatto con il monitor Lenovo ThinkVision 3D 27 che grazie a particolari accorgimenti tecnici riesce a ricreare l'illusione della spazialità tridimensionale senza che sia necessario utilizzare occhialini
La Formula E può correre su un tracciato vero? Reportage da Misano con Jaguar TCS Racing
La Formula E può correre su un tracciato vero? Reportage da Misano con Jaguar TCS Racing
Abbiamo visto ancora una volta la Formula E da vicino, ospiti di Jaguar TCS Racing. In questa occasione però curve e rettilinei erano quelli di un circuito permanente, molto diverso dagli stretti passaggi delle strade di Roma
Lenovo LEGION e LOQ: due notebook diversi, stessa anima gaming
Lenovo LEGION e LOQ: due notebook diversi, stessa anima gaming
Lenovo ha puntato forte sul gaming negli ultimi anni e lo testimoniano i marchi LEGION e LOQ, il primo per gli amanti delle massime prestazioni e dell'assenza di compromessi, il secondo per chi desidera soluzioni dal buon rapporto tra prestazioni e prezzo. Abbiamo provato due esponenti dell'offerta, così da capire l'effettiva differenza prestazionale.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-01-2020, 22:08   #1
draco97
Junior Member
 
Iscritto dal: Jan 2020
Messaggi: 3
[Python] Piccolo programma morra cinese (principiante)

Salve a tutti, mi sono avvicinato alla programmazione in Python da circa una settimana... e per ora sto studiando qualche base come i cicli while for e qualche nozione sulle variabili e i loro tipi. Siccome volevo iniziare a testarmi e provare a scrivere qualche piccolissimo programma con ciò che ho imparato, ho deciso di provare a scrivere una piccola morra cinese molto base, che da semplicemente un valore casuale alla mossa dell'avversario e decreta il giocatore che ha vinto:

Codice:
    print ('Benvenuto alla morra cinese di Alessandro.')
    from random import randint
    giocatore = input ('scegli carta, forbice o sasso  ')
    if giocatore != 'carta' and giocatore != 'sasso' and giocatore != 'forbice':
        print ('errore')   # in caso di errore, far ripartire il ciclo da capo 
    else:
        print ('hai scelto', giocatore)
    computer = randint (0,2)
    if computer == 0: computer = 'sasso'
    elif computer == 1: computer = 'forbice'
    else:
        computer = 'carta'
    print('il tuo avversario ha scelto ', computer)
    if giocatore == 'carta' and computer == 'forbice' or giocatore == 'forbice' and computer == 'carta' or giocatore == 'sasso' and computer == 'forbice':
       print (' complimenti, hai vinto! ')
    elif giocatore == 'carta' and computer == 'carta' or giocatore == 'forbice' and computer == 'forbice' or giocatore == 'sasso' and computer == 'sasso':
       print (' è un pareggio!')
    else:
       print (' Mi spiace, hai perso!')

      # fine della partita, chiedere se iniziare un'altra partita e quindi ricominciare il ciclo da capo
I problemi che non riesco a risolvere sono essenzialmente due:
- vorrei che, nel caso in cui l'immissione del valore della risposta del giocatore sia errato, il ciclo oltre a dare errore si debba interrompere e/o ripartire senza proseguire oltre.
- creare, una volta terminata la partita, un ulteriore pezzo di codice nel quale se la risposta equivalga a si, il ciclo ricominci da capo consentendo di effettuare un'altra partita.
Ho provato ad inserire un while a inizio programma. Tuttavia così facendo risolve soltanto un pezzo di codice (if, ed else iniziali) e non va oltre la scelta effettuata dal giocatore. Ho provato ad inserire più cicli per ogni if else impostando un valore true o false ad una variabile all'inizio del ciclo, ma anche in questo caso il risultato è stato insoddisfacente visto che il ciclo non ripartiva effettivamente se andavo a digitare un input si, ma invece il programma terminava.
Dove sbaglio? Sono effettivamente inesperto e alle prime armi, ma sono stato ore a provare quantomeno a far ripartire il ciclo una volta finita la partita. Mi serve sapere qualche nozione avanzata per poter fare ciò, oppure è sufficiente quello che ho imparato fin'ora?
Grazie a tutti quelli che mi risponderanno
draco97 è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2020, 09:36   #2
DoctorT
Senior Member
 
Iscritto dal: Jul 2005
Messaggi: 735
l'idea di mettere un ciclo while è giusta, però il tuo codice sembra un pochino confuso mentre il python ha delle funzionalità ottime che ti permettono di scrivere un codice più elegante e comprensibile. Ad esempio per transformare in stringa la risposta random del computer è più semplice usare una lista.
Ti allego una mia implementazione che risolve il problema n.2, per gestire l'errore di input forse si potrebbe usare mettere la risposta dell'utente dentro un altro ciclo while ma la cosa si complica ... vediamo se arriva qualcuno con una rispost più elegante.

Codice:
from random import randint
    
segno = ["carta","forbice","sasso"]
continua = "s";

print ('Benvenuto alla morra cinese di Alessandro.')
while continua =="s":
	giocatore = input ('scegli carta, forbice o sasso  ')
	if giocatore != 'carta' and giocatore != 'sasso' and giocatore != 'forbice':
		print('errore')   # in caso di errore, far ripartire il ciclo da capo 
	else:
		print ('hai scelto', giocatore)
	computer = segno[randint(0,2)] # il computer scegli il segno da giocare
	print("il tuo avversario ha scelto", computer)
	if giocatore == 'carta' and computer == 'forbice' or giocatore == 'forbice' and computer == 'carta' or giocatore == 'sasso' and computer == 'forbice':
		print (' complimenti, hai vinto! ')
	elif giocatore == computer:
		print (' è un pareggio!')
	else:
		print (' Mi spiace, hai perso!')
	continua = input ("vuoi continuare ? (s/n)   ") # chiedi se coninciare un altra partita
__________________
O.S.: WIN 10 64-bit CPU: INTEL I5 12400F RAM: 16 GB Corsair Vengeance LPX 3200 Mhz VGA: MSI ARMOR RX570 4GB OC MOBO: ASROCK B660M PRO RS HDD: Seagate 1TB SDD: CRUCIAL MX500 500GB ALI: BE QUIET PURE POWER CM 11 600W
DoctorT è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2020, 10:00   #3
DoctorT
Senior Member
 
Iscritto dal: Jul 2005
Messaggi: 735
aggiunta la gestione dell'errore di input ... ho usato lo statement break e l'operatore in delle liste, forse non li hai ancora studiati ma rendono tutto un pò più chiaro

Codice:
from random import randint
    
segno = ["carta","forbice","sasso"]
continua = "s";

print ('Benvenuto alla morra cinese di Alessandro.')
while continua =="s":
	while True:
		giocatore = input ('scegli carta, forbice o sasso  ')
		if giocatore in segno:
			break
		else:
			print ("errore ripeti la scelta ")
	print ('hai scelto ', giocatore)
	computer = segno[randint(0,2)] # il computer scegli il segno da giocare
	print("il tuo avversario ha scelto", computer)
	if giocatore == 'carta' and computer == 'forbice' or giocatore == 'forbice' and computer == 'carta' or giocatore == 'sasso' and computer == 'forbice':
		print (' complimenti, hai vinto! ')
	elif giocatore == computer:
		print (' è un pareggio!')
	else:
		print (' Mi spiace, hai perso!')
	continua = input ("vuoi continuare ? (s/n)   ") # chiedi se coninciare un altra partita
__________________
O.S.: WIN 10 64-bit CPU: INTEL I5 12400F RAM: 16 GB Corsair Vengeance LPX 3200 Mhz VGA: MSI ARMOR RX570 4GB OC MOBO: ASROCK B660M PRO RS HDD: Seagate 1TB SDD: CRUCIAL MX500 500GB ALI: BE QUIET PURE POWER CM 11 600W
DoctorT è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2020, 15:58   #4
draco97
Junior Member
 
Iscritto dal: Jan 2020
Messaggi: 3
Aaah ecco. Sapevo che stavo sbagliando la forma e l'ordine in cui scrivevo il programma, sinceramente non penso che ci sarei mai arrivato da solo. Gli operatori (in, in particolare) non li ho ancora studiati, ma spero di arrivarci presto...
Quindi guardando il secondo programma che hai scritto: il ciclo while si interrompe se metto un valore corretto per poi far proseguire la seconda parte del programma, mentre fa ricominciare il primo ciclo da capo se sbaglio giusto?
draco97 è offline   Rispondi citando il messaggio o parte di esso
Old 04-01-2020, 12:51   #5
DoctorT
Senior Member
 
Iscritto dal: Jul 2005
Messaggi: 735
Quote:
Originariamente inviato da draco97 Guarda i messaggi
Aaah ecco. Sapevo che stavo sbagliando la forma e l'ordine in cui scrivevo il programma, sinceramente non penso che ci sarei mai arrivato da solo. Gli operatori (in, in particolare) non li ho ancora studiati, ma spero di arrivarci presto...
Quindi guardando il secondo programma che hai scritto: il ciclo while si interrompe se metto un valore corretto per poi far proseguire la seconda parte del programma, mentre fa ricominciare il primo ciclo da capo se sbaglio giusto?
si esatto il ciclo si interrompe quando immetti un valore corretto.
__________________
O.S.: WIN 10 64-bit CPU: INTEL I5 12400F RAM: 16 GB Corsair Vengeance LPX 3200 Mhz VGA: MSI ARMOR RX570 4GB OC MOBO: ASROCK B660M PRO RS HDD: Seagate 1TB SDD: CRUCIAL MX500 500GB ALI: BE QUIET PURE POWER CM 11 600W
DoctorT è offline   Rispondi citando il messaggio o parte di esso
Old 05-01-2020, 13:39   #6
draco97
Junior Member
 
Iscritto dal: Jan 2020
Messaggi: 3
Quote:
Originariamente inviato da DoctorT Guarda i messaggi
si esatto il ciclo si interrompe quando immetti un valore corretto.
Perfetto, grazie mille gentilissimo
draco97 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Lenovo ThinkVision 3D 27, la steroscopia senza occhialini Lenovo ThinkVision 3D 27, la steroscopia senza o...
La Formula E può correre su un tracciato vero? Reportage da Misano con Jaguar TCS Racing La Formula E può correre su un tracciato ...
Lenovo LEGION e LOQ: due notebook diversi, stessa anima gaming Lenovo LEGION e LOQ: due notebook diversi, stess...
Nothing Ear e Ear (a): gli auricolari per tutti i gusti! La ''doppia'' recensione Nothing Ear e Ear (a): gli auricolari per tutti ...
Sony FE 16-25mm F2.8 G: meno zoom, più luce Sony FE 16-25mm F2.8 G: meno zoom, più lu...
Cuffie Sennheiser MOMENTUM 4 Wireless: q...
SSD 1080 PRO non è quello che pen...
Ring Intercom ed Echo Pop: sconto imperd...
ASML, intesa con il governo olandese: pi...
Portatile Low cost potentissimo: AMD Ryz...
I nuovi coupon nascosti di Amazon: ecco ...
Torna il super tablet da 109€ con displa...
Continuano le super offerte su Google Pi...
Meta copia Microsoft con Windows: il sis...
Blackmagic Design: arriva il nuovo softw...
La sonda spaziale NASA Voyager 1 ricomin...
Blackmagic PYXIS 6K per riprendere filma...
Sapphire Nitro+ B650I Wi-Fi: un’ottima s...
E4 Computer Engineering potenzierà...
Blackmagic URSA Cine 12K: la videocamera...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:41.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Served by www3v