因此,对于我的第一个大型python项目,我正在构建一个基于文本的游戏。它应该是模块化的,因此故事和项目等可以编辑和替换,只需对实际源代码进行少量编辑。基本上,用户命令存储为字符串,该字符串立即分成列表。第一个元素是类似'inspect'的动作,第二个元素是该动作的伪参数,如'location'或'item'。解释命令后,它会进入名为'item_or_loc'的执行模块。我在这里得到错误。有人可以帮忙吗?如果它有帮助,我会提供更多信息或整个源代码。
命令模块:
def item_or_loc(iolo):
if iolo in items.items_f():
print (items.iolo(1))
elif iolo in locations.locations_f():
print (locations.iolo(1))
else:
print ('Command not recognized, try again.')
def location(loco):
plo_l = PlayerClass #(player location object_location)
if loco == 'location':
plo_l.player_loc(0)
def abort(abo):
sys.exit()
def inventory(invo):
pio_i = PlayerClass #(player inventory object_inventory)
if invo == 'inventory':
pio_i.player_inv(0)
项目模块:
patient_gown=('Patient gown', 'A light blue patient\'s gown.')
wrench=('Wrench','')
stick=('Stick','')
prybar=('Prybar','')
screwdriver=('Screwdriver','')
scalpel=('Scalpel','')
broken_tile=('Broken tile','')
hatchet=('Hatchet','')
janitor_suit=('Janitor suit','')
位置模块:基本上与项目模块相同
播放器模块:
import items
import locations
class PlayerClass:
def player_inv(inv_index):
pinventory = [items.patient_gown[inv_index]]
print (pinventory)
def player_loc(loc_index):
ploc = [locations.cell[loc_index]]
print (ploc)
答案 0 :(得分:3)
您不会从items.items_f
返回任何内容。您需要返回容器或序列。我会从下面提出一个不同的方法,但这至少是一个开始。
def items_f():
patient_gown=('Patient gown','A light blue patient\'s gown.')
wrench=('','')
stick=('','')
crowbar=('','')
screwdriver=('','')
scalpel=('','')
broken_tile=('','')
hatchet=('','')
janitor_suit=('','')
return (patient_gown, wrench, stick, crowbar,
screwdriver, scalpel, broken_tile, hatchet, janitor_suit)
要解释一下,items_f
本身不是一个容器,而是一个函数(或者更确切地说,一个方法,你可以把它想象成一个“附加”到一个对象的函数)。函数 不返回任何内容,但是当您调用它们时,调用产生的值只是None
。
现在,当您执行if x in y:
之类的测试时,y
必须是序列或容器类型;并且由于您正在测试函数items_f
的结果,并且由于该函数返回None
,因为您已在上面定义它,因此测试会抛出错误。
处理这种情况的最佳方法实际上取决于程序的更大结构。正确方向的第一步可能是这样的:
def items_f():
return (('Patient gown', 'A light blue patient\'s gown.'),
('Wrench', 'A crescent wrench.'),
('Stick', '...'))
但这也许不是最好的解决方案。我基于你上面添加的内容(顺便说一下,现在缺少items_f
函数)的建议是使用某种保存项目的数据结构。一个简单的方法是字典:
items = {'patient_gown':('Patient gown', 'A light blue patient\'s gown.'),
'wrench':('Wrench', '...'),
...
}
这会创建一个包含所有可能项目的字典。现在,当你想要一个特定的项目时,你可以这样:
item = items['patient_gown']
这样你根本不需要一个功能;你可以直接访问整个字典。