[Risolto]reimpostare variabile con valore non assegnato

di il
14 risposte

[Risolto]reimpostare variabile con valore non assegnato

Posto il mio test per farvi capire meglio:
punteggio=0
a=raw_input("Come ti chiami?")
b="Ciao"
c=input("Quanto fà 2+2?")
d="ma"
e="non è esatto"
f="riprova"
h="è la risposta che volevo."
i="è esatto,"
j="Perfetto,"
k="non"
while c==4:
    print j,i,d,k,h,"Riprova:"
    c=input("Quanto fà 2+2?")
while c!=22:
    print e,f
    c=input("Quanto fà 2+2?")
if c==22:
    punteggio=punteggio+10
    print j,e,d,h
    print punteggio,"punti totalizzati per",a,"."
    print "prossima domanda."
g=raw_input("La frase, 'io non dico il falso' è:")
while g=="vera" or g=="giusta":
    print "stai più attento, te la rifaccio e ragionaci meglio, è un paradosso."
    g=raw_input("La frase, 'io non dico il falso' è:")
if g=="falsa" or g=="sbagliata":
    punteggio=punteggio+10
    print j,a
    print "hai totalizzato",punteggio,"punti"
    print "andiamo avanti"
il programma funziona ma se per sbaglio non inserisco un valore per la variabile input o raw_input giustamente il programma crasha e si blocca restituendo un errore.
come posso quindi far si che se una variabile ha valore nullo la rimposto con il suo vecchio valore?
potrei fare cosi :
if g==raw_input(""):
    g=raw_input("Quanto fà 2+2?")
ma come la indento, dove andrebbe messa?

poi un'altra domanda, posso usare all'interno del ciclo for il ciclo while?
grazie in anticipo

14 Risposte

  • Re: [Risolto]reimpostare variabile con valore non assegnato

    Per la seconda domanda: si dipende da cosa vuoi ottemere dal while ma comunque si! Una puntializzazine: avrei usato un dizionario per le varie a,b,c ecc. E qualche oggetto o funzione x rendere piu leggero il codice, cosi sarebbe piu` facile mettere il controllo del valore nullo. Sfrutta la progr oriet agli oggetti ti darebbe una marcia in piu`

    Inviato dal mio LG-E440 con Tapatalk 4
  • Re: [Risolto]reimpostare variabile con valore non assegnato

    Grazie.
    ho modificato infatti è più comodo, solo che, o nn ho capito io come si fà, oppure ,quello che ho dovuto inserire nel codice è l'unico modo, parlo di print per gli elementi del dizionario
    a={"0":"Ciao",\
       "1":"non",\
       "2":"ma",\
       "3":"Perfetto",\
       "4":",",\
       "5":"è corretto",\
       "6":"riprova",\
       "7":"è la risposta che volevo",\
       "8":"hai totalizzato",\
       "9":"punti",\
       "10":"prossima domanda."}
    b=raw_input("Come di chiami?")
    punteggio=0
    print a['0'], b
    for x in range (3):
        c=input("Quanto fà 2+2? ")
        if c==22:
            punteggio=punteggio+10
            print a['3'], a['4'], a['1'], a['5'], a['2'], a['7']
            print a['8'], punteggio, a['9']
            print a['10']
            break
        if c==4:
            for x in range(3):
                print a['3'], b, a['5'], a['4'], a['2'], a['1'], a['7'], a['6']
                break
        elif c!=22:
            for x in range(3):
                print a['1'], a['5'], a['4'], a['6']
                break
    
    L'unico modo che ho trovato per fare stampare al programma la sequenza che fa comodo a me è richiamare per ogni elemento la variabile ( aprire le parentesi [ ] inserire le virgolette la virgola e poi di nuovo... tutto questo per ogni elemento) a sto punto sarebbe più comodo lasciare la lista di variabili... però spero di sbagliarmi perchè credo che cosi il codice sia più leggero e comprensibile.
    quindi la domanda è :
    c'è un altro modo per stampare in una sequenza da me voluta gli elementi di un dato dizionario?
    es:
    print a["1","4","1","8", ecc...]
    ovviamente questo non funziona l'ho già provato.
    PS :
    riguardo al ciclo while in un ciclo for era per fare fare al programma il calcolo delle risposte massime per ogni domanda. Nel vecchio programma che scrissi c'era la domanda del 2+2, questo ovviamente fa 4 ma la domanda è a trabocchetto quindi la risposta esatta è 22, giustamente se il tizio preme 4 e gli torna una risposta negativa penserebbe "ma che computer di m***a sei!? 2+2 fa 4 idiota.." quindi ho pensato di mettere 3 conseguenze:
    se è uguale a 4 rispondi con (bravo, è esatto, ma non è quello che volevo)
    se è uguale a 22 rispondi con (bravo, non è corretto, ma è quello che volevo)
    se è diverso da 4 e 22 rispondi con (negativo).
    tutto questo però racchiuso in un ciclo for che da massimo tre possibilita di riavviare l'istruzione, dopodiche passare alla domanda successiva senza calcolare i punti se si è superato il limite range.
  • Re: [Risolto]reimpostare variabile con valore non assegnato

    Ciao unbreker,
    potresti riadattare il for che vedi nell'altro mio post di python, quello per scorrere la stringa e invece di mandare un raw_input, ti prepari tre variabili (cioe' tre costanti in realta' ) con dentro i numeri delle combinazioni che ti interessano e glieli passi tramite gli if che metterai dento il ciclo for, cioe:
    ciccio=341527
    lino=43542176
    pino=1546
    qui metti il tuo for per i 3 tentativi
    ...
    if c==22
    pro = ciccio
    for i in pro:
    if a.has_key(i):
    valore = dizionario
    ...
    if c==4
    pro=lino
    -scrivi la stessa cosa del for precedente-

    if c!=22
    pro=pino
    - scrivila stessa cosa del primo for-

    scusa ma l'ho fatto di fretta che devo scappare pero ti ho dato l'idea, per la sintassi controlla tu e ovviametne usa le variabili con nomi comodi a te!
    fammi sapere, scusa la confusione!!
  • Re: [Risolto]reimpostare variabile con valore non assegnato

    Allora io sono riuscito a trovare la soluzione non nel modo che mi hai descritto perche non sono riuscito a capire bene a.has_key ma ho risolto cosi:

    ho editato il vecchio codice nel secondo messaggio e funziona, dopo 3 risposte giuste o sbagliate il ciclo si blocca...
    lo posto ugualmente evito incomprensioni
    a={"0":"Ciao",\
       "1":"non",\
       "2":"ma",\
       "3":"Perfetto",\
       "4":",",\
       "5":"è corretto",\
       "6":"riprova",\
       "7":"è la risposta che volevo",\
       "8":"hai totalizzato",\
       "9":"punti",\
       "10":"prossima domanda."}
    b=raw_input("Come di chiami?")
    punteggio=0
    print a['0'], b
    for x in range (3):
        c=input("Quanto fà 2+2? ")
        if c==22:
            punteggio=punteggio+10
            print a['3'], a['4'], a['1'], a['5'], a['2'], a['7']
            print a['8'], punteggio, a['9']
            print a['10']
            break
        if c==4:
            for x in range(3):
                print a['3'], b, a['5'], a['4'], a['2'], a['1'], a['7'], a['6']
                break
        elif c!=22:
            for x in range(3):
                print a['1'], a['5'], a['4'], a['6']
                break
    
  • Re: [Risolto]reimpostare variabile con valore non assegnato

    Forse sono andato OT.
    quindi mi rispondo alla domanda del post da solo.
    La soluzione alla domanda principale "come riassegno a una variabile nulla il valore principale?" è:
    for x in range (3):
        c=input("Quanto fà 2+2? ")
        if c==22:
            punteggio=punteggio+10
            print a['3'], a['4'], a['1'], a['5'], a['2'], a['7']
            print a['8'], punteggio, a['9']
            print a['10']
            break
        if c==4:
            for x in range(3):
                print a['3'], b, a['5'], a['4'], a['2'], a['1'], a['7'], a['6']
                break
        elif c!=22:
            for x in range(3):
                print a['1'], a['5'], a['4'], a['6']
                break
    mettendo c=input("...") dopo il primo ciclo, se si preme invio e, quindi si da valore nullo alla variabile, il ciclo riparte da c==input("...") dato che if non ha un riscontro positivo per la variabile c elif si accorge che il valore è diverso da quello voluto quindi fa ripartire il calcolo.
    spero di non dire una ca***tona, ma questo è quello che ho capito facendo delle prove.
    Grazie a tutti per altri eventuali suggerimenti
  • Re: [Risolto]reimpostare variabile con valore non assegnato

    Ciao unbreker,

    ho rivisto il programmino e te lo riporto qui sotto...gli ho dato un ordinata! Qualcosa da affinare, te la lascio volentieri!
    Non riesco a ricordare come si fa stampare l'accento del verbo è (non puoi usare questo carattere perche' non riconosciuto da alcuni sistemi...)

    def combinaRisposta (combinazione):
    comb=combinazione
    risposta = ' '
    for i in comb:
    if a.has_key(i):
    risposta = risposta + a.get(i)
    return risposta

    a={'0': ' Ciao', '1':' non', '2': ' ma', '3':' Perfetto', '4':',', '5':' corretto', '6':' riprova', '7':' la risposta che volevo', '8':' hai_totalizzato', '9':' punti', 'a':' prossima domanda'}

    b=raw_input('Come ti chiami? ')
    punteggio=0
    print a['0'], b


    for x in range (3):
    c=raw_input('Quanto fa 2+2? ')
    if c=='22':
    punteggio=punteggio+10
    combinazione = '341527'
    print combinaRisposta(combinazione)
    combinazione='89'
    print combinaRisposta(combinazione), punteggio
    combinazione = 'a'
    print combinaRisposta(combinazione)
    break
    elif c=='4':
    for x in range(3):
    combinazione = '542176'
    print combinaRisposta(combinazione)
    break
    else:
    for x in range(3):
    combinazione = '1546'
    print combinaRisposta(combinazione)
    break


    occhio, se fai il copia incolla, devi rivedere tutte le identazioni altrimenti non ti funziona un piffero!!

    Speriamo ti sia utile

    Ciao
  • Re: [Risolto]reimpostare variabile con valore non assegnato

    Scusa non considerare quello di prima, considera questo:
    def combinaRisposta (combinazione):
    	comb=combinazione
    	risposta = ' '
    	for i in comb:
    		if a.has_key(i):
    			risposta = risposta + a.get(i)
    	return risposta
    
    a={'0': ' Ciao', '1':' non', '2': ' ma', '3':' Perfetto', '4':',', '5':' corretto', '6':' riprova', '7':' la risposta che volevo', '8':' hai_totalizzato', '9':' punti', 'a':' prossima domanda'}
    
    b=raw_input('Come ti chiami? ')
    punteggio=0
    print a['0'], b
    
    
    for x in range (3):
    	c=raw_input('Quanto fa 2+2? ')
    	if c=='22':
    		punteggio=punteggio+10
    		combinazione = '341527'
    		print combinaRisposta(combinazione)
    		combinazione='89'
    		print combinaRisposta(combinazione), punteggio
    		combinazione = 'a'
    		print combinaRisposta(combinazione)
    		break
    	elif c=='4':
    		for x in range(3):
    			combinazione = '542176'
    			print combinaRisposta(combinazione)
    			break
    	else:
    		for x in range(3):
    			combinazione = '1546'
    			print combinaRisposta(combinazione)
    			break
    
  • Re: [Risolto]reimpostare variabile con valore non assegnato

    Grazie, mi hai fatto capire anche come funziona una funzione, da creare con def
    cmq per fare accettare i caratteri speciali bisogna inserire all'inizio del codice
    # -*- coding: utf-8 -*-
    e, quando l'interprete incontrerà caratteri speciali quali "è" per esempio, verrano tradotti nel giusto modo.
    non sò se posso continuare a chidere in questo post ma vorrei capire se posso aggiungere delle chiavi al dizionario sempre creando una funzione tipo quella che hai fatto tu.
  • Re: [Risolto]reimpostare variabile con valore non assegnato

    Buongiorno
    se intendi se sia possibile inserire elementi in un dizionario, la risposta e' si:
    ne crei uno vuoto:
    dic = {}
    e poi lo riempi, un elemento alla volta:
    
    dic ['a'] = '1'
    dic ['b'] = 1
    dic ['1'] = 'c'
    
    come puoi vedere puoi utilizzare come chiave qualsiasi "cosa": caratteri, interi, ho provato anche con float e stringhe e funziona tranquillamente; tanto il dizionario per definizione non deve essere ordinato.
  • Re: [Risolto]reimpostare variabile con valore non assegnato

    Ma se volessi farlo quando il programma è già in funzione posso?
    cioè quello che hai descritto tu lo ottengo perchè conosco il linguaggio e posso editare il codice, ma se volessi aggiungere i dati nel dizionario "d" senza l'uso dei caratteri di python?
    cioè faccio un esempio, faccio una domanda raw_input nella variabile ciccio, e un'altra input nella varibile pippo.
    come si può fare per aggiungere ciccio a una chiave e pippo nel valore della chiave ciccio del dizionario "d" senza editare il dato codice?
    spero di essermi spiegato bene grazie Gincum
  • Re: [Risolto]reimpostare variabile con valore non assegnato

    unbreker ha scritto:


    ma se volessi farlo quando il programma è già in funzione posso?
    cioè quello che hai descritto tu lo ottengo perchè conosco il linguaggio e posso editare il codice, ma se volessi aggiungere i dati nel dizionario "d" senza l'uso dei caratteri di python?
    cioè faccio un esempio, faccio una domanda raw_input nella variabile ciccio, e un'altra input nella varibile pippo.
    come si può fare per aggiungere ciccio a una chiave e pippo nel valore della chiave ciccio del dizionario "d" senza editare il dato codice?
    spero di essermi spiegato bene grazie Gincum
    la soluzione è questa :
    a={}
    def aggiungi():
    	b=raw_input("parola da aggiungere: ")
    	c=input("numero?")
    	a[b]=c
    	print (a)
    aggiungi()
  • Re: [Risolto]reimpostare variabile con valore non assegnato

    Yes sir!
  • Re: [Risolto]reimpostare variabile con valore non assegnato

    Posso salvare nel dizionario i valori usando lo stesso file, o mi conviene operare su un diz che salvo in un file .txt esterno al programma?
  • Re: [Risolto]reimpostare variabile con valore non assegnato

    Se vuoi salvare un dizionario come tale devi usare il metodo pickle. Tale metodo ti permette di salvare oggetti python e riutilizzarli senza perdere la loro identita'. Se salvi un dizionario, rileggi un dizionario. Altrimenti non puoi salvare un oggetto dizionario in un file di testo, ma eventualmete solo la coppia chiave valore. Poi dovresti rileggere il file e ricreare il dizionario.

    Per esempio:
    
    f = open('file.txt', 'w')
    for k,v in dizionario.items():
       f.write('%s:%s\n' % (k,v))
    f.close()
    
    E lo ricrei:
    
    d = {}
    for l in open('file.txt')
       s = l.split(':')
       d[s[0]]  = s[1].replace('\n', '')
    
    Se invece vuoi usare il metodo pickle:
    
    import pickle
    f = open('file.pkl', 'wb')
    f.dump(dizionario, f)
    
    Per riavere l'oggetto dizionario:
    
    import pickle
    f = open('file.pkl', 'rb')
    dizionario = pickle.load(f)
    
Devi accedere o registrarti per scrivere nel forum
14 risposte