python for循环从暴雪api中查找和打印名称,其行为异常

2024-06-09 01:19:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个脚本,通过暴雪api在python中查找并打印我的公会的ILVL。我意识到我的代码很难看/很糟糕/没有优化。这是我的第一个python项目,我正在学习。你知道吗

我遇到的问题是,当我运行脚本时,在打印我的公会中的角色名称时,它会给我不稳定的结果。有的会打印多次,有的会按预期工作,只打印一次。我很可能在这个过程中完全错了,但我的想法到目前为止还是有效的。你知道吗

代码如下:

def guild_list(glink):
    with urllib.request.urlopen(glink) as url:
         gSource = url.read()
         gSourceDecoded = gSource.decode(encoding='UTF-8')
         gSource2 = str.replace(gSourceDecoded,"\"",' ')
         #finds total number of "characters"
         stringo = gSource2.split()
         nameCount = str(stringo.count('character'))
         gFirstSpace = gSource2.find('character')
    nameC = 0
    while nameC != int(nameCount):
        nextName = gSource2.find('character', gFirstSpace + 1)
        spaceBeforeName = gSource2.find(' ', nextName + 18)
        spaceAfterName = gSource2.find(' ', spaceBeforeName + 1)
        nameLen = spaceAfterName - spaceBeforeName
        cName = gSource2[spaceBeforeName + 1:spaceBeforeName + nameLen]
        gFirstSpace = gFirstSpace + nameC
        print(spaceBeforeName,'space before character name.')
        print(spaceAfterName,'space after character name.')
        nameC = nameC + 1
        print(cName)
        print(nameC,'number of instance \"character\" found.')

guild_list('http://us.battle.net/api/wow/guild/mugthol/license%20and%20registration?fields=members')

结果我开始重复同一个名字几次。然后逐渐开始只列出每个名字一次。这就是我困惑的地方。你知道吗

结果:

708 space before character name.
717 space after character name.
Euphoria
1 number of "character" found.
708 space before character name.
717 space after character name.
Euphoria
2 number of "character" found.
708 space before character name.
717 space after character name.
...
255 number of "character" found.
32740 space before character name.
32748 space after character name.
Bawbity
256 number of "character" found.
32997 space before character name.
33009 space after character name.
Kilikinilei

谢谢你的帮助,如果我的代码读起来很糟糕,我再次道歉。我边走边学。你知道吗


Tags: of代码namenumberspacefindprintcharacter
2条回答

您不应该使用字符串操作来解析数据。它是JSON格式的,所以只需使用内置的json库将其解析为本机Python dict。你知道吗

import json
import requests

def guild_info(guild_name, fields="members"):
    url = "http://us.battle.net/api/wow/guild/{guild_name}/license%20and%20registration?fields={fields}".format(guild_name=guild_name, fields=fields)
    pg = requests.get(url).content
    return json.loads(pg)

info = guild_info("mugthol")

获取包含数据的dict。你可以像这样使用它

for member in info["members"]:
    char = member["character"]
    print("{name:<15} Level {level} ".format(**char))

这让你

Introvert       Level 88 
Euphoria        Level 86 
Timid           Level 90 
Intricacy       Level 87 
Obscurity       Level 90 
Silhouette      Level 40 
Ragingfupa      Level 87 
Enragedfupa     Level 90 
Ragingticks     Level 90 
# ... etc

相关问题 更多 >