Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Il nuovo top di gamma vivo punta su un comparto fotografico particolarmente articolato, con un teleobiettivo da 200 megapixel e teleconvertitori esterni capaci di arrivare a 400 mm equivalenti. Lo abbiamo provato a Tenerife, mettendo alla prova fotocamere, prestazioni, autonomia e accessori. Ecco come si è comportato.
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
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: 738
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: 738
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: 738
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 X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
BYD supera per la prima volta le 300.000...
Crisi RAM, spunta un prezzo incredibile ...
Ginux, un nuovo kernel compatibile con L...
Gemini Notebook si aggiorna: arrivano i ...
Svolta per l'emulazione della prima Xbox...
Narwal celebra 10 anni: l'evoluzione tec...
TIM Enterprise acquisisce il 70% di VoiS...
Altro che dicembre, la RTX 5080 da 24 GB...
Quale futuro per Mass Effect? Tutte le i...
Schermi rotti su iPhone Duo: un report s...
Lo stealer VOLTA chiede a Claude, Kimi e...
Intel e Oracle puntano sulle CPU Xeon pe...
Offerte Amazon da urlo: Mac mini M6 a 89...
Bici elettriche a prezzi da record su Am...
Il boom dell'IA fa salire i costi: HP, A...
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:50.


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