我正在尝试使用Python来解决'Love-Letter' mystery problem of HackerRank,但我陷入了一个在我的循环中变量没有得到更新的地方。
s = input()
first_char = s[0]
last_char = s[-1]
ascii_first_char = ord(first_char)
ascii_last_char = ord(last_char)
count = 0
i = 1
while ascii_first_char < ascii_last_char:
count += abs((ascii_last_char-ascii_first_char))
ascii_first_char = ord(s[i])
ascii_last_char = ord(s[-i])
i += 1
print(count)
如果你试图运行它,你会看到alc没有根据我继续递增的ord(s[i])
改变它的值。为什么会这样?
答案 0 :(得分:1)
你得到s [0]的第一个字母和s [-1]的最后一个字母。在循环中,您将使用相同索引的下一个字母i。
我不了解你在while循环中的情况。而不是&#34; ascii_first_char&lt; ascii_last_char&#34;你应该测试你是否看过字符串的每个元素。为此,我们必须循环len(s)/ 2次。类似的东西:
while i < len(s) - i:
或同等的
while 2*i < len(s):
这种条件只适用于均匀长度。当我知道循环次数
时,我更喜欢for-loopscurrent_line = input()
# if length is even, we don't care about the letter in the middle
# abcde <-- just need to look for first and last 2 values
# 5 // 2 == 2
half_length = len(current_line) // 2
changes = 0
for i in range(index):
changes += abs(
ord(current_line[i]) - ord(current_line[-(i+1)])
)
print (changes)
答案 1 :(得分:0)
s1 = ['abc','abcba','abcd','cba']
for s in s1:
count = 0
i = 0
j = -1
median = len(s)/2
if median == 1:
count += abs(ord(s[0])-ord(s[-1]))
else:
while i < len(s)/2:
count += abs(ord(s[j])-ord(s[i]))
i += 1
j -= 1
print(count)