2015-06-20 36 views
1

我正在尝试编写一个程序,该程序将项目添加到基于随机数的列表中。部分程序可能会滚动其他项目,但所有重复的项目都应该重新进行滚动。我的问题是,当我尝试使用我能够找到的方法(比较列表来设置列表来测试dups,然后将该列保存到列表),但我不断收到TypeError:'list'对象是不可调用。令人困惑的是,当我使用我设置的简单列表进行测试时,它工作正常。Python将设置转换为列表,不断收到TypeError:'list'对象不可调用

这是我的代码

from random import randint 

# Dice roller function 
def roll_dice(dice, sides, bonus): 
    count = 0 
    roll = 0 
    for count in range(dice): 
     roll += randint(1, sides) 
    roll += bonus 
    return roll 

list = ['1', '2', '3', '4', '5'] 
print_list = '' 
for x in range(0, len(list)-1): 
    print_list += ' ' + list[x] 
print print_list[1:] 

# Minor special armor ability roller 
def armor_special_ability(): 
    reroll = 1 
    ability = [] 
    abil_list = '' 
    while reroll > 0: 
     result = int(raw_input('Roll:'))#roll_dice(1,100,0) 
     if result <= 25: 
      ability.append('Glamered') 
     elif result <= 32: 
      ability.append('Light Fortification') 
     elif result <= 52: 
      ability.append('Slick') 
     elif result <= 72: 
      ability.append('Shadow') 
     elif result <= 92: 
      ability.append('Silent Moves') 
     elif result <= 96: 
      ability.append('Spell Resistance (13)') 
     elif result <= 97: 
      ability.append('Improved Slick') 
     elif result <= 98: 
      ability.append('Improved Shadow') 
     elif result <= 99: 
      ability.append('Improved Silent Moves') 
     elif result <= 100: 
      reroll += 2 
     reroll -= 1 
     if len(ability) > len(set(ability)): 
      reroll += (len(ability) - len(set(ability))) 
      ability = list(set(ability)) 
    return ability 

print armor_special_ability() 

谁能帮我弄清楚为什么我不断收到这个错误?我花了几个小时在网上搜索没有成功。

回答

3

的问题是线 -

list = ['1', '2', '3', '4', '5'] 

要覆盖内置list功能与您的清单,这个任务后,如果您尝试调用list()它会导致错误,因为它会尝试访问您定义的列表并调用它。

使用不同的名称,永远不要使用list作为变量的名称(除非您真的想覆盖list内置函数),因为它会覆盖内置函数。

+0

你可以通过键入'dir(__ builtins __)' – forivall

+0

看到一个列表我实际上只是意识到我自己和登录关闭这篇文章。对于我之前测试过的代码没有发表评论,因为“这与我正在做的这件新事情没有关系”。 这也是我愚蠢地使用列表作为变量。 ^ _ ^ – KhornetheGrim