2010-10-31 6 views
0

cette fonction ne me donne pas une sortie lorsqu'il est testé en IDLE python:fonction bousculade ne sera pas sortie

import random 

def scramble(string): 

rlist = [] 

while len(rlist) < len(string): 

     n = random.randint(0, len(string) - 1) 
     if rlist.count(string[n]) < string.count(string[n]): 
      rlist += string[n] 
    rstring = str(rlist)   
    return rstring 

scramble('sdfa') 

J'ai passé beaucoup de temps à essayer de comprendre le problème, mais le code semble bon moi.

+1

Votre indentation ne semble pas correcte. – kennytm

+4

Vous n'imprimez pas le résultat à l'écran, il est donc normal qu'il ne génère aucun résultat. Notez également qu'il existe déjà une fonction de lecture aléatoire dans le module aléatoire. –

Répondre

0

Correctement le formatage semble résoudre le problème.

import random 

def scramble(string): 
    rlist = [] 
    while len(rlist) < len(string): 
     n = random.randint(0, len(string) - 1) 
     if rlist.count(string[n]) < string.count(string[n]): 
     rlist += string[n] 
    rstring = str(rlist)   
    return rstring 
print(scramble('sdfa')) 

En Python, le retrait est tout aussi important que la bonne syntaxe :) Par ailleurs, comme l'a dit @Vincent Savard, vous ne l'avez pas imprimer le résultat. Dans votre scramble() vous avez renvoyé une chaîne, mais vous n'avez rien fait avec cette chaîne.

+0

Son message original n'avait pas de formatage du tout, je ne voudrais pas blâmer le problème sur l'indentation. Quelqu'un l'a édité, il n'a peut-être pas indenté correctement. –

0

Quelques notes:

Ne pas utiliser string comme le nom de l'argument, il pourrait entrer en conflit avec le standard module string.

Vous ne voulez probablement pas retourner un str() de la liste, ce qui se traduit par quelque chose comme

>>> rlist = ['s', 'a', 'f', 'd'] 
>>> str(rlist) 
>>> "['s', 'a', 'f', 'd']" 

Au lieu de cela, pour obtenir un résultat de chaîne brouillée, utilisez str.join():

>>> rlist = ['s', 'a', 'f', 'd'] 
>>> ''.join(rlist) 
'safd' 
>>> 

Le dernier 2 lignes de scramble peuvent être jointes en un seul return:

return str(rlist) 

ou

return ''.join(rlist) 
Questions connexes