Python函数不能再次运行

时间:2016-05-27 22:59:17

标签: python python-2.7

def equip(item):
    x = True
    while x == True:
        if len(bag_sword) > 1:
            print "You can't have 2 weapons equipped!"
            break
        if len(bag_chest) > 1:
            print "You can't have 2 chestplates equipped!"
            break
        if len(bag_gloves) > 1:
            print "You can't have 4 gloves equipped!"
            break
        if len(bag_helmet) > 1:
            print "You can't have 2 helmets equipped!"
            break

        if item == "iron sword" and "iron sword" in bag:
            print "\nYou equip the Iron Sword"
            bag.remove("iron sword")
            bag_sword.append("iron sword")
            break

每当我放入"铁剑"之后我第二次运行此功能进入bag_之一,并尝试添加另一个来测试它,它没有做任何事情,代码完全冻结。

bag_是所有列表。

我的猜测是,while循环被卡住,每当我在游戏中将某些内容放入列表时,它并没有改变长度,因为那不是语言的工作原理吗?

2 个答案:

答案 0 :(得分:3)

一旦你在包里加了一把剑,你的条件都没有。您的len(bag_sword)正好为1,(因此if len(bag_sword) > 1:无法匹配),'iron sword' in bag为假。

由于您的if个语句都不匹配,因此不会执行break,并且您的while循环会一直持续。

您不想测试bag_sword中是否有多个项目。测试该包中是否有任何项目:

if bag_sword:  # true if not empty
    print "You can't have 2 weapons equipped!"
    break

因为您在添加第二件武器之前正在测试

答案 1 :(得分:0)

整个代码都是废话。 首先,您正在处理列表而不是字典。

你不能用Python"打破"关键词。在Python中存在if,elif和else关键字。

item是您在函数中传递的参数。

关键字len([' item',' two']) 给出结果集2, 列表只有值,并且元素在列表中按编号提取。

例如: mylist = ['你好','世界']

打印mylist [0]会导致' hello'

让自己更熟悉内置类型: https://docs.python.org/2/library/stdtypes.html

以下是一些示例代码:

bag_s = {'bag_sword':0,'bag_chest':0,'bag_gloves':0,'bag_helmet':0,'iron sword':0}

def equip(item):
   its = item.keys()    
   for itx in its:        
     if itx == 'bag_sword':
       if item[itx] > 1:
          print 'you can\'t have 2 weapons erquipped'            

      elif itx == 'bag_chest':
        if item[itx] > 1:
            print 'you can\'t have 2 weapons erquipped'

      elif itx == 'bag_gloves':
        if item[itx] > 1:
            print 'you can\'t have 2 weapons erquipped'

      elif itx == 'bag_helmet':
        if item[itx] > 1:
            print 'you can\'t have 2 weapons erquipped'            


      elif itx == 'iron sword':
        if item[itx] > 1:
            print 'you can\'t have 2 weapons erquipped'


      if item[itx] == 1:
        bag_s[itx]+=1


equip({'bag_sword':1})

print bag_s