打印字符串还是变量?

Print either a string or a variable?

这是我的代码:

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)

我正在尝试打印句子 "me too thanks" 的乱序版本或只是 "hi"。我最终得到的是:

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

等等。它按预期工作,但当我只想打印一个或另一个时,它会将括号作为一个整体打印。我曾与其他程序一起工作,这通常可以正常工作,但出于某种原因并非如此。抱歉,如果这不是一个好问题,我对 python 比较陌生。

您的代码完全按照要求执行:打印结果,这是一个列表。要显示列表中的一个或另一个,请使用 random.choice:

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

Ajax1234 解决方案有效,但在 50% 的情况下会丢弃 scramble 的结果。它还创建了一个不必要的列表供选择。那是对 CPU 能力的浪费。

就这样:

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

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

如果你有更多的案例,你可以随机选择一个函数,这样你就只执行你需要的那个,例如使用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 ()

试试这个:

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