Python 2.7中for循环无法递增迭代器变量的问题求助
问题分析与解决方案
核心问题
你代码里的矛盾点在于同时用while和for循环操作同一个变量,直接打乱了索引变量的逻辑:
- 初始化的
i是数值型索引,但嵌套的for i in s会把i重新赋值为字符串里的每个字符,完全覆盖了原来的数值,导致while循环的索引递增逻辑彻底失效——第一次进入while后,for循环直接遍历整个字符串,结束后i变成最后一个字符(比如hello里的o),此时while判断字符与数字的大小,结果永远为False,循环直接终止。 - 当你把变量名改成
it时,for循环结束后it是字符串的最后一个字符,此时while判断it < len(s)会触发类型错误(Python3不允许字符串和整数直接比较),导致程序崩溃,循环根本无法启动。
修正方案
方案1:直接用for循环遍历字符(推荐,更简洁)
完全不需要手动维护索引,for循环本身就是逐个迭代字符串元素:
def solution(s): m = "" braille = { " ": "000000", "^": "000001", "a": "100000", "b": "110000", "c": "100100", "d": "100110", "e": "100010", "f": "110100", "g": "110110", "h": "110010", "i": "010100", "j": "010110", "k": "101000", "l": "111000", "m": "101100", "n": "101110", "o": "101010", "p": "111100", "q": "111110", "r": "111010", "s": "011100", "t": "011110", "u": "101001", "v": "111001", "w": "010111", "x": "101101", "y": "101111", "z": "101011" } for char in s: if char.isupper(): m += braille["^"] + braille[char.lower()] else: m += braille[char] print(m) solution("hello")
方案2:用while手动维护索引
如果一定要手动控制索引递增,删除嵌套的for循环,直接通过索引取字符并手动递增:
def solution(s): i = 0 m = "" braille = { " ": "000000", "^": "000001", "a": "100000", "b": "110000", "c": "100100", "d": "100110", "e": "100010", "f": "110100", "g": "110110", "h": "110010", "i": "010100", "j": "010110", "k": "101000", "l": "111000", "m": "101100", "n": "101110", "o": "101010", "p": "111100", "q": "111110", "r": "111010", "s": "011100", "t": "011110", "u": "101001", "v": "111001", "w": "010111", "x": "101101", "y": "101111", "z": "101011" } while i < len(s): char = s[i] if char.isupper(): m += braille["^"] + braille[char.lower()] else: m += braille[char] i += 1 # 手动递增索引变量 print(m) solution("hello")
内容的提问来源于stack exchange,提问作者August Fercar
相关产品推荐
相关产品推荐

