python查询 - 函数参数是不正确的类型?

时间:2011-08-14 07:50:20

标签: python

我是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

3 个答案:

答案 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

引用的列表