这是我的代码:
#!/bin/python
#gets the id of the player
player = input()
first_moves = [int(i) for i in raw_input().split()]
second_moves = [int(i) for i in raw_input().split()]
class calculate_bid(object):
def __init__(self,player,first_moves,second_moves):
self.myMove=[]
self.yourMove=[]
self.myCash=100
self.yourCash=100
self.pos=0
if player==1:
self.myMove.extend(first_moves)
self.yourMove.extend(second_moves)
self.tie=True
else:
self.myMove.extend(second_moves)
self.yourMove.extend(first_moves)
self.tie=False
for self.x in range(len(self.myMove)):
if self.myMove[self.x]>self.yourMove[self.x]:
self.myCash-=self.myMove[self.x]
self.pos+=1
elif self.myMove<self.yourMove[self.x]:
self.yourCash-=self.yourMove[self.x]
self.pos+=1
else:
if self.tie==True:
self.myCash-=self.myMove[self.x]
self.pos+=1
self.tie=False
else:
self.yourCash-=self.yourMove[self.x]
self.pos-=1
self.tie=True
print self.myCash,self.yourCash
为什么,如果我提供此输入
2
4 15
8 8
打印
92,-15
注意: 我不认为这只发生在我的电脑上。当我在HackerRank中运行这个时,会发生同样的情况。
注意:
当第二个数字yourCash
通过(15 8)
语句时,elif
变为零。在此之前,它仍然是100.我在来这里之前调试了它。
此输入:
2
4 15 7
8 8 6
产生输出:
92, -14
我期待:
92, 79
答案 0 :(得分:2)
我不知道你的代码应该做什么,但可能你想减去现金的动作。这就是你在if
和elif
子句以及if
子句的else
部分内部循环中所做的。但是,在else / else
部分,您将现金设置为负面移动:
self.yourCash=-self.yourMove[self.x]
虽然你可能想写
self.yourCash -= self.yourMove[self.x]
答案 1 :(得分:2)
首先,在这一行中,您将移动与整个self.myMove
数组进行比较:
elif self.myMove<self.yourMove[self.x]:
你真的想要与位置self.x
elif self.myMove[self.x]<self.yourMove[self.x]:
这个bug会导致else
分支出现,你遇到Carsten已经提到过的问题,在这里你否定了移动而不是减去它。而不是
self.yourCash=-self.yourMove[self.x]
你想要
self.yourCash-=self.yourMove[self.x]