Domanda Problema Return

Stato
Discussione chiusa ad ulteriori risposte.

Artemiso

Utente Silver
16 Giugno 2012
159
11
21
92
Ho avuto un esercizio da fare dal mio professore di Fondamenti di informatica che consisteva nel trovare una password composta da 3 lettere minuscole dalla a alla z di una pagina messa online da lui come tester.

PHP:
import urllib.requestdef risultato(userID,passwd):
    passwd=str(passwd)
    uri="http://www.dis.uniroma1.it/~santucci/PY/sfida_1.php?param="
    sock = urllib.request.urlopen(uri+passwd+"&name="+userID)
    htmlSource = str(sock.read())
    sock.close()
            return "Giusto!" in htmlSource

e per trovare la password
PHP:
def password():    
alfa=["a","b","c","d","e","f","g","h","i","l","m","n","o","p","q","r","s","t","u","v","z"]    
   for a in alfa:       
       for b in alfa:            
            for c in alfa:                
                    s=(a+b+c)                
                    return (s)

Ma si ferma alla prima iterazione del ciclo e quindi mi da solo s="aaa"
Come faccio a far assumere a s i diversi valori?
 
Ultima modifica:
Strano che il programma si fermi alla prima iterazione, non di dovrebbe dare errore, lo provato e mi da errore? cmd.. hai messo il return all'interno di un ciclo, quindi il return si ripete giusto?... di norma, una funzione, non ritorna un, e solo un, valore?

Io ti consiglierei, al posto di ritornare (a+b+c) di appendere quest'ultimo ad una lista vuota, dichiarata all'esterno della funzione, poi, farei un ciclo, all'esterno, che prova semplicemente ogni elemento della lista, non so se mi sono spiegato.
 
Ultima modifica:
Codice:
gen = itertools.combinations_with_replacement(characters,password_length) [COLOR=gray]#1[/COLOR]
[COLOR=#00008B]for[/COLOR] password [COLOR=#00008B]in[/COLOR] gen:                                                      [COLOR=gray]#2 [/COLOR]
    check_password(password)                                              [COLOR=gray]#3[/COLOR]
Ecco come funziona:

  • Riga 1: questo crea un generatore. è come una funzione che ricorda dove si era interrotta. Guarda qui per ulteriori info: Closures & Generators - Dive Into Python 3 . Questo particolare generatore passa attraverso tutte le possibili combinazioni dei caratteri dati della lunghezza determinata.
  • Riga 2: per ogni iterazione del ciclo for successivo (gen) viene chiamato. Questo fornisce il valore successivo
  • Riga 3: Fai quello che devi fare
ad esempio se "characters" = '01234567890' e "password_length" = 2
le combinazioni sono: ('0','0'), ('0','1'), ('0','2')...('0','9'),('1','0'),('1','1')...('9','9').


- - - Updated - - -

per quanto riguarda il tuo codice, occhio ai tab ;)
 
Al posto di usare un return, che conclude la funzione, usa una funzione con relativo argomento di funzione.
Così facendo, il programma genererà tutte le combinazioni possibili, ogni volta che ne genera una, avvia la funzione necessaria per fare il controllo della password.
Una volta che la password sarà controllata, ritorna a generare la seconda password, e così via.
Quindi,
Codice:
[COLOR=#0000BB][FONT=monospace]def password[/FONT][/COLOR][COLOR=#007700][FONT=monospace]():    
[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace] alfa[/FONT][/COLOR][COLOR=#007700][FONT=monospace]=[[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"a"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"b"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"c"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"d"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"e"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"f"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"g"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"h"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"i"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"l"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"m"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"n"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"o"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"p"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"q"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"r"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"s"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"t"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"u"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"v"[/FONT][/COLOR][COLOR=#007700][FONT=monospace],[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"z"[/FONT][/COLOR][COLOR=#007700][FONT=monospace]]    
 for [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]a in alfa[/FONT][/COLOR][COLOR=#007700][FONT=monospace]:       
  for [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]b in alfa[/FONT][/COLOR][COLOR=#007700][FONT=monospace]:            
   for [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]c in alfa[/FONT][/COLOR][COLOR=#007700][FONT=monospace]:                
    [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]s[/FONT][/COLOR][COLOR=#007700][FONT=monospace]=([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]a[/FONT][/COLOR][COLOR=#007700][FONT=monospace]+[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]b[/FONT][/COLOR][COLOR=#007700][FONT=monospace]+[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]c[/FONT][/COLOR][COLOR=#007700][FONT=monospace])                
    testpassword(userID,s)[/FONT][/COLOR]
 
Stato
Discussione chiusa ad ulteriori risposte.