打印字符串还是变量?

时间:2018-03-20 20:56:19

标签: python python-3.x shuffle

这是我的代码:

from random import shuffle

def scramble(sentence):
   split = sentence.split()
   shuffle(split)
   return ' '.join(split)

for i in range(20):
    reply = ['hi',scramble('me too thanks')]
    print(reply)

我试图打印一个混乱的句子版本"我也非常感谢"或只是简单地"嗨"。我最终得到的是:

['hi', 'me too thanks']
['hi', 'too thanks me']
['hi', 'thanks me too']
['hi', 'too thanks me']
['hi', 'me too thanks']

等等。它按预期工作,但当我只想打印其中一个时,它会将括号打印成一个整体。我曾与其他通常有效的程序合作过,但这不是出于某种原因。对不起,如果这不是一个好问题,我对python来说比较新。

3 个答案:

答案 0 :(得分:3)

你的代码完全按照它所说的去做:打印结果,这是一个列表。要显示列表中的一个或另一个,请使用random.choice

for i in range(20):
   reply = ['hi',scramble('me too thanks')]
   print(random.choice(reply))

答案 1 :(得分:1)

Ajax1234解决方案有效但在50%的时间内丢弃了scramble的结果。它还会创建一个不必要的列表供选择。这会浪费CPU能力。

只是做:

for _ in range(20):
    print('hi' if random.randint(0,1) else scramble('me too thanks'))

它是打印一个或另一个字符串的三元表达式。很酷的是,如果random.randint(0,1)返回1,则scramble根本不执行

如果你有更多的案例,你可以随机选择一个函数,所以你只能使用lambda来执行你需要的那个:

for _ in range(20):
    reply = [lambda : 'hi',lambda:scramble('me too thanks'),lambda:'hello']
    print(random.choice(reply)())  # note the calling of the chosen function with ()

答案 2 :(得分:0)

试试这个:

from numpy as np
def scramble(sentence):
   split = sentence.split()
   np.random.shuffle(split)
   return ' '.join(split)

for i in range(20):
    reply = ['hi',scramble('me too thanks')]
    print(np.random.choice(reply))