Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-01-2020, 23: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, 10:36   #2
DoctorT
Senior Member
 
Iscritto dal: Jul 2005
Messaggi: 736
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, 11:00   #3
DoctorT
Senior Member
 
Iscritto dal: Jul 2005
Messaggi: 736
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, 16: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, 13:51   #5
DoctorT
Senior Member
 
Iscritto dal: Jul 2005
Messaggi: 736
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, 14: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


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Crisi delle memorie: ASUS torna al passa...
Le console next-generation potrebbero es...
Gemini cresce ancora: la quota di mercat...
Samsung sfida TSMC: la capacità produtti...
Iliad alza il prezzo della fibra ottica ...
Il prossimo low cost di POCO sarà il più...
The Elder Scrolls VI: ecco le ultime sul...
Ecco i saldi di fine anno Amazon, 34 off...
iPhone Fold: scorte limitate al lancio m...
OpenAI porterà la pubblicità in ChatGPT ...
TSMC aumenterà ancora i prezzi: nel 2026...
Marvel pubblica anche il secondo teaser ...
Nuovo accordo tra xAI e il Pentagono: l'...
La famiglia Xiaomi 17 sta per registrare...
Nuove auto elettriche che vedremo sul me...
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: 15:43.


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