在这种情况下使用ord()是错误的吗



我正在解决一个代码战问题-有两组包含具有自身能力的字符(a=1,B=2,C=3…Z=26(。字符串仅由大写字母组成。由于只有两个小组相互对抗,总力量(A+B+C…(较大的小组获胜。如果权力相等,那就是平局。

我只是将x和y转换为列表,并使用ord((将字符转换为数字。我用if语句比较了它们的数字总和。然而,我的代码仍然会出现一些错误(通过:103失败:5(。我的代码中有什么问题?

这是我的密码。。。

def战斗(x,y(:

z = []
for a in x:
z.append(ord(a))

first_group = sum(z)
p = []
for b in y:
p.append(ord(b))

second_group = sum(p)
if first_group > second_group:
return x
elif first_group < second_group:
return y
else:
return "Tie!"

您需要进行实际的映射。例如,"AA"是2,"Z"是26,因此"AA"&ltZ',但您的解决方案的"AA"=130,"Z"=90,因此"AA">'Z’。

你可以减去ord('A')得到相对数,再加一:

ord(a) - ord('A') + 1

否,在这种情况下使用ord()是完全可以的,前提是您正确使用它:-(

假设条件如您所述(xy是大写字母的可迭代集合(字符串、列表等((,这将起作用,但对于相同规模的团队来说,这只是的保证。

我的意思是,一支拥有25个A单位(得分=25(的球队应该输给一支拥有一个Z单位(得分=26(的球队。

但是,因为你隐含地将每个单元的分数增加ord('A') - 1,所以这是行不通的。ord('A')为65分,A队得1625分,Z队得90分。

你使用的分数必须为每个单元的实际分数构建,类似于(在这个过程中使计算更加简洁(:

first_group = sum((ord(item) - ord('A') + 1 for item in a))

这将使你的代码沿着以下路线:

def battle(x, y):
first = sum((ord(item) - ord('A') + 1 for item in x))
second = sum((ord(item) - ord('A') + 1 for item in y))
if first > second:
return x
if second > first:
return y
return "Tie!"

相关内容

最新更新