为何形如dict[range(x,y)] == 'str'的代码无法实现预期功能?
代码无法运行的原因及修正方案
你的代码存在三个核心问题,导致无法正常运行:
- 方法调用错误:
movement.lower只是引用了字符串的lower方法对象,并没有执行它。必须写成movement.lower()才能将movement转换为小写字符串,完成和'left'的比较。 - 字典访问逻辑错误:字典不能通过
range(1,144)这样的范围对象直接取值,字典的键是单个独立元素,你需要遍历这个范围内的每个键,逐个检查是否存在于字典中,以及对应的值是否为'py'。 - 计算逻辑错误:
(one_to_[...] == 'py') - int(1)这种写法完全不符合需求——比较操作返回的是布尔值(True/False),布尔值和整数相减只会得到0或-1,根本不是你想要的「找到的键减1」的结果。
修正后的代码
如果你的字典中只有一个符合条件的键(即值为'py'且键在1-143之间),可以用这段代码:
if movement.lower() == 'left': for key in range(1, 144): if key in one_to_ and one_to_[key] == 'py': a = key - 1 print(a) break # 找到目标键后立即停止遍历 else: print("未找到值为'py'的目标键")
如果存在多个符合条件的键,需要输出所有结果:
if movement.lower() == 'left': result_list = [] for key in range(1, 144): if key in one_to_ and one_to_[key] == 'py': result_list.append(key - 1) print(result_list)
内容的提问来源于stack exchange,提问作者Santiago
相关产品推荐
相关产品推荐

