python中偶尔出现的变量比较错误

2024-10-03 21:31:02 发布

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

在下面的程序中,靠近末尾的if语句的结果偶尔是错误的,但我看不到其中的模式。我已经尽可能多地调试了它,但是我找不到我的错误。我为大量的代码感到抱歉,但我不知道代码中的错误在哪里,我只知道它在下面的代码中的某个地方。你知道吗

如果您能帮忙,我们将不胜感激!你知道吗

我对python不是很有经验,所以请详细解释一下答案

for i in range(1,10):
import random

Cards = list(range(0,8))
print("shuffling...")
random.shuffle(Cards)
#print(Cards)

PlayerCards = []
ComputerCards = []
CardsLen = int(len(Cards)) / 2

for i in range(int(CardsLen)):
    PlayerCards.append(Cards[0])
    del Cards[0]
    ComputerCards.append(Cards[0])
    del Cards[0]

#print(PlayerCards)
#print(ComputerCards)



Ab5s = ['9', '12', '1', '10', '5', '6', '6', '8']

#print(Ab5s)

Ab5sS = sorted(Ab5s, key = int)
#print(Ab5sS)


AbNames = ['Magic', 'Cunning', 'Courage', 'Wisdom', 'Temper']
#print(AbNames)

Ab5Name = AbNames[4]
AbNamesDict = {5: Ab5s}



PlayerCardNum = PlayerCards[0]
ComputerCardNum = ComputerCards[0]



PlayerCardAb5 = Ab5s[PlayerCardNum]
ComputerCardAb5 = Ab5s[ComputerCardNum]


PlayerAbVal = Ab5s[PlayerCardNum]
ComputerAbVal = Ab5s[ComputerCardNum]

#print(PlayerAbVal)
#print(ComputerAbVal)


while True:
    try:
        PlayerAbUse = "Temper" #input("Which ability do you want to use ")
        PlayerAbUse = PlayerAbUse.title()
        PlayerAbNum = (AbNames.index(PlayerAbUse) + 1)
        break

    except ValueError:
        print("error")
        continue


AbList = AbNamesDict[PlayerAbNum]    
PlayerAbVal = (AbList)[PlayerCardNum]
ComputerAbVal = (AbList)[ComputerCardNum]

#print(PlayerAbVal)
#print(ComputerAbVal)

print("Player has " + PlayerCardAb5 + " " + Ab5Name)
print("Computer has " + ComputerAbVal + " " + Ab5Name)

WonCards = []


#This is where I believe it is going wrong

if PlayerAbVal < ComputerAbVal:
    Winner = 0
else:
    if PlayerAbVal == ComputerAbVal:
        Winner = 2
    else:
        Winner = 1

WonCards.append(PlayerCards.pop(0))
WonCards.append(ComputerCards.pop(0))



if Winner == 0:
    print("Computer Win ")
    while len(WonCards) > 0:
        ComputerCards.append(WonCards.pop(0))
    print("")
else:
    if Winner == 1:
        print("Player Win ")
        while len(WonCards) > 0:
            PlayerCards.append(WonCards.pop(0))
        print("")

    else:
        print("Draw ")
        Winner = random.randint(1,2)

Tags: ifcardsprintappendwinnerplayercardsplayerabvalcomputercardnum
2条回答

您的问题是比较的是字符串,而不是数值。我最初的想法是您使用的是python2,但实际上这种失败也可以用lexicographical ordering来解释

将列表Ab5sS更改为包含整数。所以:

Ab5s = [9, 12, 1, 10, 5, 6, 6, 8]

要修复您的print,请将其转换为字符串,例如:

print("Player has " + str(PlayerCardAb5) + " " + Ab5Name)

或者,最好使用format()

print("Player has {} {}".format(PlayerCardAb5, Ab5Name))

正如您在另一条评论中提到的,您的问题是您将字符串作为值从文件中读取。这不会阻止您将值转换为int;最简单的方法可能只是列表理解:

Ab5s = ['9', '12', '1', '10', '5', '6', '6', '8']
Ab5s = [int(item) for item in Ab5s]

还有其他方法,比如map,但我认为那是falling out of favour。你知道吗

Ab5s = map(float, Ab5s)

只需修改if语句,强制类型为int(使用if..elif..else获得更多pythonicess)

if int(PlayerAbVal) < int(ComputerAbVal):
   Winner = 0
elif int(PlayerAbVal) == int(ComputerAbVal):
   Winner = 2
else:
   Winner = 1

相关问题 更多 >