在Python 3.x中使用random.shuffle加扰字符串

时间:2015-09-02 23:52:46

标签: python algorithm function python-3.x recursion

您好我是编程新手,并且在过去一年中通过各种方式教自己Python。我已经潜伏了一段时间并得到了很多帮助但现在我有一个特定的问题:

我正在进行单词争夺战,我遇到了障碍。

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

现在上面的代码按照需要工作,但偶尔它会返回我输入加扰器函数的原始单词。

我的问题是:有没有办法确保返回的字符串总是与给定的字符串不同。 我尝试在内部使用scrambler函数和while循环,这会使脚本崩溃并给出一个错误,说明已达到递归限制。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分: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支票,这样最终会给你一个不同于你输入的字词。

答案 1 :(得分:0)

希望您喜欢编程Chris。 好吧,如果你这样测试...

 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))

你将在〜< 25th尝试单词test,因为我做了...(但不能确定,因为它不是真正的随机)

所以你可以在你的函数中添加一些if语句。如果new_world与word相同,你可以再次回忆起这个函数......它不需要任何循环。它就像一些递归基函数。

像这样......

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)