我有一个充满不同材料的记事本,我被要求将它们分类为用户友好的可读语句。
例如,如果我的material_list
包含['Wool', 'Cotton']
,则会输出'Wool & Cotton'
但如果我的material_list包含['Wool', 'Aloe', 'Fiber']
,则会输出'Wool & Aloe Fiber'
。
我实施此操作有时我会'Silk'
,但如果我的列表中有'Bamboo'
和'Silk'
,则表示它是'Bamboo Silk'
。
当我['Bamboo','Banana','Silk']
时,我不必担心这种情况。
# List of all Materials
materials = [
'Aloe', 'Alpaca', 'Bamboo', 'Banana', 'Cotton',
'Cowhide', 'Fiber', 'Hemp', 'Jute', 'Lambskin',
'Leather', 'Linen', 'Paper', 'Polyester', 'Polypropylene',
'Seagrass', 'Shearling', 'Sheepskin', 'Silk', 'Sisal',
'Tencel', 'Viscose', 'Wool' , 'Yard'
]
def FindMaterial(toPrint,database):
material_list = []
for x in range (0,len(database)):
if database[x].lower() in toPrint.lower():
material_list.append(database[x])
#Special cases for certain combinations of materials
def SpecialCases(mat1,mat2):
if mat1 and mat2 in material_list:
material_list.remove(mat1)
material_list.remove(mat2)
material_list.append(mat1+' '+mat2)
SpecialCases('Aloe','Fiber')
SpecialCases('Bamboo','Silk')
SpecialCases('Banana','Silk')
SpecialCases('Wool','Sisal')
if len(material_list) == 1:
material_string = (material_list[0])
else:
material_string = (material_list[0]+' & '+material_list[1])
return material_string
FindMaterial(sample_input,materials)
sample_input = ['Silk']
之类的内容导致ValueError: list.index(x): x not in list
material_list.remove(mat1)
'Wool'
没有产生任何错误。我知道单独'Fiber'
或'Sisal'
单独产生相同的错误,但这两个词永远不会单独出现,只有'Silk'
可以。
答案 0 :(得分:4)
if mat1 and mat2 in material_list:
如果您正在尝试确定mat1和mat2是否都在material_list中,我认为您有错误。试试
if mat1 in material_list and mat2 in material_list: