我是python的新手,我在将参数传递给random.choice函数时遇到了麻烦。
基本上我正在尝试编写一个循环,首先从'a'列表中选择一个随机字母(都是其他列表的名称),然后再将所选字母输入random.choice以生成随机字母序列。
不幸的是,对random.choice的第二次调用不起作用,它只是不断重复输入的字母,而不是指向一个新的列表。任何想法如何解决这一问题?我一直在网上看了几个小时,但找不到任何类似的问题/解决方案。任何帮助将不胜感激!
import random
a = ['b','c','d']
b = ['a','e']
c = ['a','d','f']
d = ['a','c','e','f','g','h']
e = ['b','d','h']
f = ['c','d','g','i']
g = ['d','f','i']
h = ['d','e','g','i']
i = ['f','h']
x = 0
answer = random.choice(f)
print "answer is %s " % answer
while x < 5:
answer2 = random.choice(answer)
print "answer2 is now %s " % answer2
x = x + 1
答案 0 :(得分:4)
你已陷入混合变量和数据的常见初学者陷阱,并试图将你的代码视为数据。您通常不应该尝试这样做 - 不要将变量的名称放入另一个变量并尝试以这种方式访问它。
相反,将所有数据保存在数据结构中,只需使用变量来访问该结构,如下所示:
import random
DATA = {
'a': ['b','c','d'],
'b': ['a','e'],
'c': ['a','d','f'],
'd': ['a','c','e','f','g','h'],
'e': ['b','d','h'],
'f': ['c','d','g','i'],
'g': ['d','f','i'],
'h': ['d','e','g','i'],
'i': ['f','h'],
}
x = 0
answer = random.choice(DATA['f'])
print "answer is %s " % answer
while x < 5:
answer2 = random.choice(DATA[answer])
print "answer2 is now %s " % answer2
x = x + 1
答案 1 :(得分:0)
嗯......一个问题是你总是从同一个名单中得到答案2,因为你没有做任何其他任务......
答案 2 :(得分:-1)
假设x == 'c'
。然后第二次调用random.choice实际上是
answer2 = random.choice('c')
这就像从仅包含'c'的列表中选择一个字母。这 NOT 等同于以下内容:
answer2 = random.choice(c)
您需要将字符串'c'
转换为变量c
引用的列表。
此映射可能有效:
values = {
"a": a, "b": b, "c": c, "d": d, "e": e,
"f": f, "g": g, "h", h, "i": i, "j": j,
}
然后,值['c']是变量c