2015-09-02 16 views
-1

你好,我是新的节目,并已自学的Python通过过去year.I各种手段在这里已经潜伏了一段时间,并得到了很多的帮助但现在我有一个具体的问题:扰与random.shuffle字符串在Python 3.x的

林就一个字争夺游戏工作,我遇到了一个障碍。

的Python 3.x的代码

def scrambler(word): 
    word_to_scramble = list(word) 
    random.shuffle(word_to_scramble) 
    new_word = ''.join(word_to_scramble) 
    return new_word 

现在上面的代码可以作为所希望的,但偶尔会返回原来的字我送入扰码器功能。

我的问题是:有没有一种方法,以确保返回的字符串总是比给出的不同。 我试图在while循环中使用扰码器函数,这会导致脚本崩溃,并给我一个错误,指出已达到递归限制。

任何帮助将不胜感激。

回答

1

如果你打的递归限制,那么很可能是你要抢1个字符的字。然而,这是非常容易除去在这个问题上的递归...:

def _scrambler(word): 
    word_to_scramble = list(word) 
    random.shuffle(word_to_scramble) 
    new_word = ''.join(word_to_scramble) 
    return new_word 

def scrambler(word): 
    new_word = _scrambler(word) 
    while new_word == word and len(word) > 1: 
     new_word = _scrambler(word) 
    return new_word 

我添加了一个len(word) > 1检查,以便这最终应该给你一个不同的词比你放什么,如果它是可以做到的所以。

+0

大概要修复从OP粘贴复制的错字/。 '''.join()'而不是'''加入。()' – sberry

+0

@sberry - 谢谢:-) – mgilson

0

希望你喜欢编程克里斯。 以及如果u测试这样的...

from random import shuffle 
word='test' 
def scrambler(word): 
     word_to_scramble = list(word) 
     shuffle(word_to_scramble) 
     new_word = ''.join(word_to_scramble) 
     return new_word 
print(scrambler(word)) 

U将得到在〜< 25日试为我做的单词测试...(不能肯定,因为它不是真的随机)

所以ü可以在你的函数中加入一些if语句。如果new_world与单词u相同,则可以再次调用该函数...并且不需要任何循环。它像一些递归基函数。

这样的事情...

enter code here 

from random import shuffle 
word = 'test' 
def scrambler(word): 
    word_to_scramble = list(word) 
    shuffle(word_to_scramble) 
    new_word = ''.join(word_to_scramble) 
    #print (new_word) if u want to check what is going on ... 
    if new_word == word: 
     scrambler(word) 
    elif new_word != word: 
     return new_word 
     print(new_word) 
scrambler(word)