Python - 变量不在循环中更新

时间:2014-11-05 18:51:00

标签: python python-3.x

我正在尝试使用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])改变它的值。为什么会这样?

2 个答案:

答案 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-loops
current_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)