擅长:python、mysql、java
<p>问题在于,在第一个函数中,您传递一个迭代器(list),而在第二个函数中,您传递一个字符串作为迭代器,因此字符串“places”用于从中获取一个随机值,该值返回一个字符</p>
<p>我建议使用<code>random.choice</code>和<code>eval</code>函数以更优雅的方式解决这个问题-</p>
<pre><code>import random
def get_random_type():
return random.choice(types)
def get_response(chosentype):
return random.choice(eval(chosentype))
randtype = get_random_type()
print(randtype)
print(get_response(randtype))
</code></pre>
<pre><code>places
The Upper Room
</code></pre>
<p>因此,如果第一个函数选择“places”,那么<code>eval</code>函数将返回变量<code>places</code>,即位置列表。使用另一个随机的。选择将给你一个随机的位置</p>
<p>编辑:正如所指出的,<code>eval</code>函数可能是危险的,因为它可以允许某人编写一串代码作为输入,迫使你的应用程序运行代码。然而,只有不负责任地使用它才是危险的。在这种情况下,由于第一个函数被迫从预定义列表中返回一个选项,因此第二个函数的输入是安全的。如果您仍然想确保安全,可以执行以下操作</p>
<pre><code>def get_response(chosentype):
if chosentype in types:
return random.choice(eval(chosentype))
</code></pre>
<p>如果您计划将此设置为Web应用程序的一部分,请阅读<code>eval</code>、它的滥用和优点</p>