错误是:可以吗't将序列乘以'float'类型的nonit'

2024-07-05 14:24:06 发布

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

我必须做一个命令行游戏,接受怪物1和2的亲和性| HP | AD并与之战斗,同时包括亲和性优势,例如

如果怪物1的亲和性是土,怪物2的亲和性是火,那么怪物1的广告每命中20%,怪物2的广告每命中20%

def getmonsterData():

    global Affinity1
    global Affinity2
    global HP1
    global HP2
    global AD1
    global AD2
    monster1 =  raw_input("Enter the Monster 1's Affinity|HP|AD> ")
    x = monster1.index('|')
    y = monster1.index('|',x+1)
    Affinity1 = monster1[:x]
    HP1 = monster1[x+1:y]
    AD1 = monster1[y+1:]
    printNow(Affinity1+"|"+HP1+"|"+AD1)

    monster2 =  raw_input("Enter the Monster 2's Affinity|HP|AD> ")
    x = monster2.index('|')
    y = monster2.index('|',x+1)
    Affinity2 = monster2[:x]
    HP2 = monster2[x+1:y]
    AD2 = monster2[y+1:]
    printNow(Affinity2+"|"+HP2+"|"+AD2)
    battleNow();


def battleNow():

    global Affinity1
    global Affinity2
    global HP1
    global HP2
    global AD1
    global AD2
    if (Affinity1 == Affinity2):
       printNow("There are no affinity advantages in this battle")
    if (Affinity1 == ("Earth") and Affinity2 == ("Fire")):
       AD1 = (AD1*.20)+AD1  #THIS IS SUPPOSED TO RETURN AD1(MONSTER 1'S AD) TO THE INCREASED 20%
       printNow("Monster 1 has an affinity advantage over Monster 2")
       return
       printNow(AD1)

然而,一旦我这样做,我得到这个恼人的错误

======= Loading Progam =======
Enter the Monster 1's Affinity|HP|AD> Earth|55|1
Earth|55|1
Enter the Monster 2's Affinity|HP|AD> Fire|52|1
Fire|52|1
The error was:can't multiply sequence by non-int of type 'float'
Inappropriate argument type.

不知道该怎么办。。我找遍了所有的答案,没有一个真正可靠的答案,这与成倍增加一个列表无关。 帮助:D

Edittttt公司: 在将我的HP1/2和AD1/2更改为int()之后,我没有得到任何错误,只收到

======= Loading Progam =======
Enter the Monster 1's Affinity|HP|AD> Earth|22|1
Enter the Monster 2's Affinity|HP|AD> Fire|25|1
Monster 1 has an affinity advantage over Monster 2
>>> 

我不知道最后一个printNow()。我想把AD1打印出来,看看20%的增长是否正确地加到了AD1上。你知道吗

return
printNow(AD1)

Tags: theglobaladhpenteraffinitymonster怪物
2条回答

你的问题是你试图用一个浮点数(AD1*.20)乘以一个字符串。你知道吗

如果启动python解释器,并执行以下操作:

>>> ad = "10"
>>> print ad *.5 + ad

你会得到的

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't multiply sequence by non-int of type 'float'

要将AD1转换为浮点:

print float(ad) *.5 + float(ad)

其他一些想法:

  • 不要使用globals。你知道吗
  • 使用类来存储实例特定的数据。你知道吗
  • 行尾不需要分号。你知道吗
  • 按建议缩进4个空格

我对你的代码做了一些修改,得出了以下结论:

class Monster():
    """Define monster characteristics
    """
    def __init__(self):
        pass

    def getMonsterData(self):
        monster =  raw_input("Enter the Monster's Affinity|HP|AD> ")
        self.loadMonsterData(monster)

    def loadMonsterData(self, monsterData):
        self.affinity, self.hp, self.ad = monsterData.split('|') # not safe
        print("{}|{}|{}".format(self.affinity, self.hp, self.ad))

def battleNow(monster1, monster2):
    """Make 2 monsters fight it out
    """
    if (monster1.affinity == monster2.affinity):
        printNow("There are no affinity advantages in this battle")
    if (monster1.affinity == "Earth" and monster2.affinity == "Fire"):
        ad = float(monster1.ad)
        monster1.ad = ad * .2 + ad #THIS IS SUPPOSED TO RETURN AD1(MONSTER 1'S AD) TO THE INCREASED 20%
        print("Monster 1 has an affinity advantage ({}) over Monster 2 ({})".format(monster1.ad, monster2.ad))
        return
    print(monster1.ad)

if __name__ == '__main__':
    monsters = []
    monsters.append(Monster())
    monsters.append(Monster())
    monsters[0].loadMonsterData("Earth|100|10")
    monsters[1].loadMonsterData("Fire|50|5")

    battleNow(monsters[0], monsters[1])

出现此错误是因为所有的HPAD都是字符串,而不是int。将字符串乘以int时,会得到该字符串的多个副本:

>>> "abc" * 3
abcabcabc

因为不能逻辑地将字符串乘以0.2,所以会出现错误。要修复它,只需使用内置的int()函数,如下所示:

HP1 = int(monster1[x+1:y])

作为旁注,我想向您介绍str.split()函数。与其计算字符串索引并尝试以这种方式解析输入,不如简单地执行以下操作

Affinity1, HP1, AD1 = monster1.split("|")

你们都准备好了。只需在需要它的变量上调用int(),然后再将它们用于任何计算。你知道吗

相关问题 更多 >