NameError:在为字符串使用%format语法时,未定义name'<name>'

时间:2016-02-06 11:09:34

标签: python string python-3.x dictionary formatting

Traceback (most recent call last):
  File "C:\Users\Simon\Downloads\rpgbs.py", line 72, in <module>
    print("%(chara) has %(health) HP." % {chara:names[k], health:str(health[k])})
NameError: name 'chara' is not defined

运行此代码时出现上述错误。相关部分如下。

当我自己运行print(names["Enemy"], health["Enemy"])时,这似乎工作正常。但是当我使用格式化语法时(根据我的理解print("%(author) likes spam.") % {author:"Simon"}),它就会消失。这与我试图迭代的事实有什么关系吗?

names = {'Player' : str(input("What's your name, hero?: ")),                                        
          'Enemy' : str(input("And who will you be duelling with?"))}
if names["Enemy"]=="UNDERTALE":
    names["Enemy"]=namechoose(["Froggit", "Sans", "Flowey", "Chara", "ASRIEL DREEMUR", "Toriel", "Undyne", "Mettaton"],1)
elif names["Enemy"]=="POKEMON":
    names["Enemy"]=namechoose(["Charizard","Blastoise", "Venusaur", "Arceus", "Dialga", "Palkia", "Groudon"],1)
elif names["Enemy"]=="DRAGON QUEST":
    names["Enemy"]=namechoose(["Corvus", "Aquila", "Hootingham-Gore", "Goresby-Purrvis", "Stella", "The Almighty", "Slime", "Metal Slime"],1)    

startinghealth=int(input("How much health do you wish to start with? 150 is recommended."))         
health = {'Player' : startinghealth,                                                                
          'Enemy' : startinghealth}                                                                 


while health["Enemy"]>0 and health["Player"]>0:
    for k in names:
        print(names[k], health[k])
        print("%(chara) has %(health) HP." % {chara:names[k], health:str(health[k])})                                                                                        

1 个答案:

答案 0 :(得分:0)

你在大括号之后错过了s字符,你也在这一行中使用chara作为变量而不是hash的字符串键。 这就是为什么你有这个错误,说你没有定义chara变量。正确的行应如下所示: print("%(chara)s has %(health)s HP." % {'chara':names[k], 'health':str(health[k])})