Python 原始输入、字典和类
在Python2.7中,我尝试这样做:当用户输入一个名称时,它搜索该名称是否在预定义的字典中,如果在预定义的字典中,它使用类和字典的值创建一个对象。以下是我目前的代码:Python 原始输入、字典和类,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,在Python2.7中,我尝试这样做:当用户输入一个名称时,它搜索该名称是否在预定义的字典中,如果在预定义的字典中,它使用类和字典的值创建一个对象。以下是我目前的代码: import os weaponList = { 'axe': {'Name': 'axe', 'Mass': 1500, 'Strike': 'Chop'}, 'knife': {'Name': 'knife', 'Mass': 300, 'Strike': 'Cut'}, 'club': {'Name': 'club',
import os
weaponList = {
'axe': {'Name': 'axe', 'Mass': 1500, 'Strike': 'Chop'},
'knife': {'Name': 'knife', 'Mass': 300, 'Strike': 'Cut'},
'club': {'Name': 'club', 'Mass': 2000, 'Strike': 'Blunt'},
'stone': {'Name': 'stone', 'Mass': 800, 'Strike': 'Blunt'},
}
class meleeWeapon:
def __init__(self, name, mass, strike):
self.name = name
self.mass = mass
self.strike = strike
def weaponask():
wepn = raw_input("Use knife, club, axe, or stone?\n> ").lower()
if wepn in weaponList:
currentWeapon = meleeWeapon(wepn['Name'], wepn['Mass'], wepn['Strike'])
print "success"
else:
print "item not recognized"
weaponask()
#return wep
weaponask()
os.system('pause')
但是,当我尝试运行此代码时,出现以下错误:
Use knife, club, axe, thrown stone, slung stone, or firearm?
> axe
Traceback (most recent call last):
File "C:\Python\dict.py", line 30, in <module>
weaponask()
File "C:\Python\dict.py", line 23, in weaponask
currentWeapon = meleeWeapon(wepn['Name'], wepn['Mass'], wepn['Strike'])
TypeError: string indices must be integers, not str
Press any key to continue . . .
使用刀、棍棒、斧头、扔石、吊石或火器?
>斧头
回溯(最近一次呼叫最后一次):
文件“C:\Python\dict.py”,第30行,在
武器任务
文件“C:\Python\dict.py”,第23行,在武器任务中
当前武器=近战武器(wepn['Name'],wepn['Mass'],wepn['Strike']))
TypeError:字符串索引必须是整数,而不是str
按任意键继续。
知道我做错了什么吗?TIA是用户输入的字符串。在您的情况下,可能是“刀”、“棍棒”、“斧头”或“石头”。您需要使用
武器列表
例如,weaponList[“刀”]
会给你{'Name':'刀子','Mass':300,'Strike':'Cut'}
替换此项:
currentWeapon = meleeWeapon(wepn['Name'], wepn['Mass'], wepn['Strike'])
为此:
currentWeapon = meleeWeapon(weaponList[wepn]['Name'], weaponList[wepn]['Mass'], weaponList[wepn]['Strike'])
更新
你可以按照jonrsharpe在评论中的建议去做(看起来也更干净!)
将当前武器更改为:
currentWeapon = meleeWeapon(weaponList[wepn]['Name'],weaponList[wepn]['Mass'],weaponList[wepn]['Strike'])
因为wepn是武器列表的关键,也是访问wepn数据的关键,所以首先你应该访问wepn(武器列表[wepn])。尝试将
wepn['Name']
更改为weponList['Name']
?武器列表对于不是列表的结构来说是一个糟糕的名称。此外,您可以将meleebreal
实例直接放入字典,而不是属性的子字典。或者,将字典直接解压缩到类currentbreal=meleebreal(**wepn])
,或者只将meleebreal
实例存储在字典中。
currentWeapon = meleeWeapon(weaponList[wepn]['Name'],weaponList[wepn]['Mass'],weaponList[wepn]['Strike'])