如何让findPokemonInfo函数返回无括号的宝可梦信息格式
问题
我想要实现一个名为findPokemonInfo(name)的函数,遍历CSV文件(文件格式为name,type,attack,speed,capture_rate),返回如下格式的宝可梦信息:
attack: 49 capture_rate: 45 name: Bulbasaur speed: 45 type: grass
当前编写的代码如下:
def findPokemonInfo(name): import csv myFile = open('pokemon.csv',"r") csvReader = csv.reader(myFile,delimiter=",") next(csvReader) pokeMon = {} for row in csvReader: if (row[0] == name): pokeMon[row[0]] = {'attack':row[2], 'capture_rate':row[4], 'name':row[0], 'speed':row[3], 'type':row[1]} print (pokeMon)
调用findPokemonInfo('Bulbasaur')后返回结果为:
{'Bulbasaur': {'attack': '49', 'capture_rate': '45', 'name': 'Bulbasaur', 'speed': '45', 'type': 'grass'}}
请问如何修改代码,让返回结果不再带有括号,符合预期格式?
解决方案
你需要调整代码逻辑,直接按指定格式打印找到的宝可梦属性,而非把数据嵌套进字典后打印整个字典。同时建议用with语句自动管理文件,避免资源泄漏,找到目标后提前退出循环提升效率。
修改后的代码如下:
def findPokemonInfo(name): import csv # with语句自动处理文件关闭 with open('pokemon.csv',"r") as myFile: csvReader = csv.reader(myFile,delimiter=",") next(csvReader) # 跳过表头行 for row in csvReader: if row[0] == name: # 按需求格式逐行打印属性,可选转换数值类型 print(f'attack: {row[2]}') print(f'capture_rate: {row[4]}') print(f'name: {row[0]}') print(f'speed: {row[3]}') print(f'type: {row[1]}') return # 找到目标后直接退出,无需继续遍历 # 未找到时的提示(可选) print(f'未找到名为{name}的宝可梦')
修改说明:
- 替换字典存储为直接打印:原来的代码把数据存进嵌套字典后打印,自然会带大括号。现在直接按
key: value格式逐行输出每个属性,完全匹配预期格式。 - 用
with管理文件:自动完成文件关闭操作,避免手动关闭可能出现的遗漏或错误。 - 提前终止遍历:找到目标宝可梦后用
return结束函数,不用遍历剩余行,节省资源。 - 可选数值转换:如果需要把
attack、speed等字段从字符串转为整数,可写成print(f'attack: {int(row[2])}'),这样输出的数值就不会带引号。
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

