使用Jython,我需要随机化一个字符串,保持单词的机智

时间:2010-07-14 19:02:22

标签: java python

这是问题所在:

功能名称:randomSentenceRedux

参数:

1.string - 要操纵的字符串对象

返回值:

一个转换后的字符串,其中原始句子中的单词是随机顺序。

测试用例:

>>>print randomSentenceRedux("My name is Sally Sue") 
My is name Sue Sally 
>>>print randomSentenceRedux("hello") 
hello
>>>print randomSentenceRedux("Don't scream at me!") 
Don't at scream me! 
>>>

描述: 编写一个函数来随机化输入字符串字符串中单词的顺序并返回结果字符串。您可以假设单词由单个空格分隔。你不能使用python随机模块中的shuffle函数

4 个答案:

答案 0 :(得分:2)

您应该查看维基百科关于Fisher-Yates shuffle的文章。它高效而简单。这是他们给出的伪代码:

To shuffle an array a of n elements:
for i from n - 1 downto 1 do
     j ← random integer with 0 ≤ j ≤ i
     exchange a[j] and a[i]

转换为Python应该很容易。

答案 1 :(得分:1)

不确定Python语法是如何适合的,但是使用Java,你会在空格分隔符上标记化String,然后使用小于令牌数组长度的随机索引,并访问令牌数组的元素,弹出它,打印它,并重复,直到令牌数组为空。

答案 2 :(得分:1)

这是一个非常简单的算法:

  • 在每个空间拆分句子(不知道jython,但java和python都有内置函数)
  • 随机播放数组
  • 加入生成的字符串数组
  • 打印新字符串

您究竟需要哪些帮助?

<强>更新

改组算法

  • 创建一个新的(空)数组
  • 虽然旧数组中有项目
  • 在0和旧数组-1中的项目数之间取一个随机数
  • 从旧阵列中删除项目并将其推送到新阵列的末尾
  • 重复,直到旧数组中没有其他项目

有更高级和更有效的改组算法,但这个简单的算法应该让你开始。

答案 3 :(得分:1)

关于改组 - 一个想法是遍历项目列表(for i in range(len(lst)))和位置i的每个元素,将其与随机元素交换(比如位置randrange(len(lst))

关于交换两个变量,请记住在Python中你可以a,b = b,a这样做 - 而不是temp=a; a=b; b=temp你必须用其他语言。

关于单词的分离,它就像strVar.split()一样简单,重新组装就像' '.join(lst)一样简单。

我没有包含确切的代码,因为这是一个家庭作业你应该做的工作......但是考虑到上述应该很容易,不是吗?