为什么在第一个for循环里可以列出所有的元素,但在第二个for循环里只能列出第一个元素呢?
# -*- coding: utf-8 -*-
#from collections import OrderedDict
import re
class inventory(object):
def __init__(self):
self.inventory_list = []
#self._index = 1
def inventory_add(self, name, item):
self.inventory_list.append((name, item))
#self._index += 1
def inventory_del(self, name, item):
self.inventory_list.remove((name, item))
def print_inventory(self):
print u'你拥有:'
for index, value in enumerate(self.inventory_list, 1):
print index, '.', value[0]
return self._judgement()
def _judgement(self):
print u'输入0返回选择场景,输入具体数字显示详细描述。'
self._choice = raw_input(">" )
#print self.inventory_list
#if re.match(r'[0-9]+', self._choice):
#self._ok_choice = int(self._choice)
#if self._ok_choice == 0:
#self.print_inventory()
#else:
for key, name in enumerate(self.inventory_list, 1):
print key, name[0]
if int(self._choice) == key:
print key
self.a = name[1]
self.a.printself()
self.print_inventory()
return self._judgement()
else:
print 'Wrong!'
return self._judgement()
#else:
#print 'Wrong!'
#return self._judgement()
class mobilephone(object):
description = u'一部手机,话费和电量应该充足吧'
def printself(self):
print self.description
class money(object):
description = u'30元'
def printself(self):
print self.description
class student_card(object):
description = u'余额还够吧?'
def printself(self):
print self.description
inventory = inventory()
inventory.inventory_add(u'手机', mobilephone())
inventory.inventory_add(u'钱', money())
inventory.inventory_add(u'学生卡', student_card())
print inventory.inventory_list
inventory.print_inventory()
其实楼主的代码是错误的, 并没有实现你想要的功能.
在 _judgement
这个方法中 遍历 内容时, 当当前的key不等于用户输入的内容时, 就会重新调用 _judgement
这个方法, 很明显这个逻辑是有问题的.
你应该遍历完才知道, 用户输入的这个, 是不是在列表中, 而不是根据其中某一个和它不相等就认为它输入的是错误的.