PDA

View Full Version : [Python 2.6] Funzione random per quiz


Saverio92
23-08-2010, 13:21
Salve, mi dedico da poco alla programmazione e sto scrivendo un quiz con python. mi sono bloccato però alla funzione random. ho strutturato il programma in funzioni che richiamerò in seguito. come posso usare la funzione random con le funzioni? per spiegarmi meglio metto il codice del programma.


import random

def inizio():
regolamento="Il regolamento del gioco è semplice. Verranno effettuate una serie di 10 domande con 4 possibilità di risposta. Per rispondere ad ogni domanda si avranno a disposizione 3 tentativi. Ogni volta che si da la risposta giusta verranno guadagnati 5 punti. Per ogni domanda sbagliata se ne perderanno 2."
global punteggio
punteggio=0
print " QUIZZETTONE"
print "domande di cultura generale"
print "--------------------------"
print "Created by Simone Montalto"
print "--------------------------"
print
print

inizio=""
while inizio!="1" or inizio!="2" or inizio!="giocare" or inizio!="regolamento":
print "Cosa vuoi fare?"
print "1 - giocare"
print "2 - regolamento"
inizio=raw_input("")
if inizio=="1" or inizio=="giocare":
break
elif inizio=="2" or inizio=="regolamento":
print regolamento

def uno():
vita=3
print
for x in range(3):
print "Chi ha affrescato il Giudizio Universale nella Cappella Sistina?"
print "a - Raffaello"
print "b - Michelangelo"
print "c - Tiziano"
print "d - Leonardo"
risposta=raw_input("Risposta: ")
if risposta=="b" or risposta=="B" or risposta=="Michelangelo" or risposta=="michelangelo" or risposta=="MICHELANGELO":
print "Risposta esatta!"
global punteggio
punteggio=punteggio+5
break
else:
vita=vita-1
global punteggio
punteggio=punteggio-2
print "Risposta errata."
print "Hai a disposizione ancora",vita,"tentativi"
print "Punti totali",punteggio


def due():
vita=3
print
for x in range(3):
print "Cos'è l'ONU?"
print "a - LメOrganizzazione Nazionale Umanitaria"
print "b - Unメorganizzazione che raccoglie molti Stati del mondo, che decidono liberamente di aderire e sono accettati solo se soddisfano determinati requisiti"
print "c - LメOrganizzazione costituita dai 7 paesi maggiormente industrializzati più la Russia"
print "d - Unメorganizzazione cui tutti gli Stati del mondo devono aderire"
risposta=raw_input("Risposta: ")
if risposta=="b" or risposta=="B" or risposta=="Unメorganizzazione che raccoglie molti Stati del mondo, che decidono liberamente di aderire e sono accettati solo se soddisfano determinati requisiti" or risposta=="unメorganizzazione che raccoglie molti Stati del mondo, che decidono liberamente di aderire e sono accettati solo se soddisfano determinati requisiti":
print "Risposta esatta!"
global punteggio
punteggio=punteggio+5
break
else:
vita=vita-1
global punteggio
punteggio=punteggio-2
print "Risposta errata."
print "Hai a disposizione ancora",vita,"tentativi"
print "Punti totali",punteggio


def tre():
vita=3
print
for x in range(3):
print "Quando è stato abbattutto il Muro di Berlino?"
print "a - 1980"
print "b - 1985"
print "c - 1989"
print "d - 1993"
risposta=raw_input("Risposta: ")
if risposta=="c" or risposta=="C" or risposta=="1989":
print "Risposta esatta!"
global punteggio
punteggio=punteggio+5
break
else:
vita=vita-1
global punteggio
punteggio=punteggio-2
print "Risposta errata."
print "Hai a disposizione ancora",vita,"tentativi"
print "Punti totali",punteggio


def quattro():
vita=3
print
for x in range(3):
print "Che cosa si intende per settore terziario?"
print "a - Attività manifatturiere"
print "b - Attività non profit"
print "c - Attività di servizi"
print "d - Attività artigianali"
risposta=raw_input("Risposta: ")
if risposta=="c" or risposta=="C" or risposta=="Attività di servizi" or risposta=="attività di servizi":
print "Risposta esatta!"
global punteggio
punteggio=punteggio+5
break
else:
vita=vita-1
global punteggio
punteggio=punteggio-2
print "Risposta errata."
print "Hai a disposizione ancora",vita,"tentativi"
print "Punti totali",punteggio


def cinque():
vita=3
print
for x in range(3):
print "Che cos'è l'IVA?"
print "a - Imposta sul valore aumentati"
print "b - Imposta sul valore acquistato"
print "c - Imposta sul valore accumulato"
print "d - Imposta sul valore aggiunto"
risposta=raw_input("Risposta: ")
if risposta=="d" or risposta=="D" or risposta=="Imposta sul valore aggiunto" or risposta=="imposta sul valore aggiunto":
print "Risposta esatta!"
global punteggio
punteggio=punteggio+5
break
else:
vita=vita-1
global punteggio
punteggio=punteggio-2
print "Risposta errata."
print "Hai a disposizione ancora",vita,"tentativi"
print "Punti totali",punteggio


def sei():
vita=3
print
for x in range(3):
print "Che cos'è l'impressionismo?"
print "a - Una corrente artistica"
print "b - Una tecnica cinematografica"
print "c - Una tecnica giornalistica"
print "d - Un movimento politico"
risposta=raw_input("Risposta: ")
if risposta=="a" or risposta=="A" or risposta=="Una corrente artistica" or risposta=="una corrente artistica":
print "Risposta esatta!"
global punteggio
punteggio=punteggio+5
break
else:
vita=vita-1
global punteggio
punteggio=punteggio-2
print "Risposta errata."
print "Hai a disposizione ancora",vita,"tentativi"
print "Punti totali",punteggio



def sette():
vita=3
print
for x in range(3):
print "Nel SI (sistema internazionale), l'intensità luminosa, si misura in:"
print "a - Lumen"
print "b - Henry"
print "c - Lux"
print "d - Candele"
risposta=raw_input("Risposta: ")
if risposta=="d" or risposta=="D" or risposta=="candele" or risposta=="Candele" or risposta=="CANDELE":
print "Risposta esatta!"
global punteggio
punteggio=punteggio+5
break
else:
vita=vita-1
global punteggio
punteggio=punteggio-2
print "Risposta errata."
print "Hai a disposizione ancora",vita,"tentativi"
print "Punti totali",punteggio



def otto():
vita=3
print
for x in range(3):
print "Qual è l'album musicale più venduto nella storia?"
print "a - Thriller di Michael Jackson"
print "b - The Wall dei Pink Floyd"
print "c - Nel blu dipinto di blu di Domenico Modugno"
print "d - Pop degli U2"
risposta=raw_input("Risposta: ")
if risposta=="a" or risposta=="A" or risposta=="Thriller di Michael Jackson" or risposta=="thriller di michael jackson":
print "Risposta esatta!"
global punteggio
punteggio=punteggio+5
break
else:
vita=vita-1
global punteggio
punteggio=punteggio-2
print "Risposta errata."
print "Hai a disposizione ancora",vita,"tentativi"
print "Punti totali",punteggio



def nove():
vita=3
print
for x in range(3):
print "Cos'è la forza centripeta?"
print "a - Una delle componenti dell'accelerazione nel moto circolare e precisamente è la componente normale rispetto alla traiettoria"
print "b - Forza tangenziale che si crea in seguito ad una rapida rotazione attorno ad un asse"
print "c - Variazione della velocità lineare nell'arco di tempo di 2 secondi"
print "d - Nessuna delle precedenti"
risposta=raw_input("Risposta: ")
if risposta=="a" or risposta=="A" or risposta=="Una delle componenti dell'accelerazione nel moto circolare e precisamente è la componente normale rispetto alla traiettoria" or risposta=="una delle componenti dell'accelerazione nel moto circolare e precisamente è la componente normale rispetto alla traiettoria":
print "Risposta esatta!"
global punteggio
punteggio=punteggio+5
break
else:
vita=vita-1
global punteggio
punteggio=punteggio-2
print "Risposta errata."
print "Hai a disposizione ancora",vita,"tentativi"
print "Punti totali",punteggio



def dieci():
vita=3
print
for x in range(3):
print "Che cosa accadde il 22 Agosto 1864?"
print "a - Fu firmata la Convenzione di Ginevra"
print "b - Fu inventata la penicillina"
print "c - Nobel istituì il Premio Nobel"
print "d - Il Cavour proclamò la nascita del regno d'Italia"
risposta=raw_input("Risposta: ")
if risposta=="a" or risposta=="A" or risposta=="Fu firmata la Convenzione di Ginevra" or risposta=="fu firmata la convenzione di ginevra":
print "Risposta esatta!"
global punteggio
punteggio=punteggio+5
break
else:
vita=vita-1
global punteggio
punteggio=punteggio-2
print "Risposta errata."
print "Hai a disposizione ancora",vita,"tentativi"
print "Punti totali",punteggio

def fine():
print "Bene, il quiz è terminato."
nome=raw_input("Potresti dirmi il tuo nome?")
print "Bravo %s, hai totalizzato %d punti" %(nome,punteggio)

il programma non è formattato bene sul forum, ma sul mio programma è indentato dove serve.

Ryuzaki_Eru
23-08-2010, 19:51
Nei forum ci sono i tag CODE apposta per evitare questi casini. Indenta il codice e ne riparliamo. E chiedi in modo più preciso cosa non capisci o cosa ti serve, cosi risparmiamo tutti del tempo prezioso.

Saverio92
23-08-2010, 23:49
Nei forum ci sono i tag CODE apposta per evitare questi casini. Indenta il codice e ne riparliamo. E chiedi in modo più preciso cosa non capisci o cosa ti serve, cosi risparmiamo tutti del tempo prezioso.

ho aggiustato con i tag code. praticamente vorrei che le domande inserite nelle funzioni comparissero a scermo casualmente. e poi se ad esempio inserisco 20 domande vorrei che ne uscissero solo 10 a caso. con la funzione random e le funzioni posso farlo?

Ryuzaki_Eru
24-08-2010, 01:05
Suggerimento: random.choice() ;)

Saverio92
24-08-2010, 10:49
Suggerimento: random.choice() ;)

ho fatto una prova rd ho inserito questi comandi

inizio()
a=(uno(),due(),tre())
random.choice(a)
fine()

ma non mi da le domande in ordine casuale ma in ordine. consigli?

Ryuzaki_Eru
24-08-2010, 11:13
In questo modo tu scegli casualmente la *funzione* non le domande *dentro la funzione*. Se vuoi le domande in modo casuale, inseriscile in una lista(*dentro le funzioni*) e le estrai con random.choice(). Ti servono dieci domande? Allora:

for domanda in range(10):
print random.choice(domande)

Saverio92
24-08-2010, 12:10
In questo modo tu scegli casualmente la *funzione* non le domande *dentro la funzione*. Se vuoi le domande in modo casuale, inseriscile in una lista(*dentro le funzioni*) e le estrai con random.choice(). Ti servono dieci domande? Allora:

for domanda in range(10):
print random.choice(domande)

quindi dovrei modificare anche il codice dentro le funzioni? scusa ma sono un niubbo in materia :-)

Ryuzaki_Eru
24-08-2010, 14:19
Se le domande sono dentro le funzioni, come nel tuo caso, e tu le vuoi estratte in modo casuale, allora devi ovviamente modificare le funzioni. Ti ho fatto l'esempio poco sopra, prova ;)

Saverio92
24-08-2010, 14:23
Se le domande sono dentro le funzioni, come nel tuo caso, e tu le vuoi estratte in modo casuale, allora devi ovviamente modificare le funzioni. Ti ho fatto l'esempio poco sopra, prova ;)

io ho creato una funzione per ogni domanda perchè ci sono anche le istruzioni se la risposta è sbagliata o esatta

Ryuzaki_Eru
25-08-2010, 13:54
Quel codice è scritto malissimo, ma imparerai con il tempo. Se tu devi fare un quiz ci sono molti modi per poterlo implementare. Come prima cosa tutte queste funzioni non ti servono, puoi anche scriverlo in modo procedurale. Metti le domande con le risposte in un file ad esempio:

Domanda Risposta

apri il file, lo leggi, dividi domande e risposte usando join e poi le visualizzi in modo casuale. Per vedere se è giusta o sbagliata basta un if e puoi piazzare tutto dentro un while, in modo che il gioco continua fin quando l'utente non digita ad esempio "esci".

tonino73
05-09-2012, 14:20
si può usare una sorte di switch fatto con gli if.. elif.. else.. usando la funzione randint(a,b) che restituisce in modo casuale un intero nell'intervallo (a,b) compresi, facendo dei controlli se il numero casuale è già uscito (man mano che li estrae li metti in una lista e controlli se uguale), quindi nell'if richiami la def corrispondente al numero ed in fine un contatore nel while che si ferma a 10 domande sicuramente diverse. Spero di essere stato chiaro.