Python中基于鼠标坐标的volume函数返回值异常问题
鼠标位置区间判断函数返回错误的解决方法
你的核心问题是条件表达式的逻辑写法错误,导致函数无法正确匹配鼠标X坐标对应的区间,下面逐一分析问题并给出修正方案:
初始代码的问题
初始代码中使用了错误的链式比较写法,比如mouse[0] > 679 <= 738,在Python中这种表达式会被拆解为(mouse[0] > 679) <= 738:
- 第一步计算
mouse[0] > 679得到布尔值True或False,对应数值1或0 - 第二步用这个数值和
738比较,永远满足<=738 - 这会导致只要鼠标X坐标大于679,就会直接进入第一个后续分支,后面的所有区间判断都不会执行
- 最后一个分支
mouse[0] > 1217 <= 1277同样存在这个问题,且未处理X坐标大于1277的情况
更新后代码的问题
更新后的代码把区间条件写反了,比如elif 679 > mouse[0] <= 738:
- 前面已经通过
if mouse[0] < 679过滤了X坐标小于679的情况,进入这个elif时X坐标必然≥679 - 此时
679 > mouse[0]永远为False,这个分支永远不会触发 - 后续所有elif的条件都存在同样的逻辑错误,最终大部分区间都会直接跳到最后一个分支返回
1
修正后的代码
利用elif的链式判断特性,前面的条件已经排除了更小的区间,后续条件可以简化写法,避免重复判断下限:
import pygame pygame.init() screen = pygame.display.set_mode((1920, 1080)) def volume(mouse): x = mouse[0] if x < 679: return 0 elif x <= 738: return 0.1 elif x <= 797: return 0.2 elif x <= 856: return 0.3 elif x <= 915: return 0.4 elif x <= 975: return 0.5 elif x <= 1035: return 0.6 elif x <= 1094: return 0.7 elif x <= 1157: return 0.8 elif x <= 1217: return 0.9 elif x <= 1277: return 1 else: # 处理X坐标大于1277的情况,可根据需求调整返回值 return 1 while True: mouse_pos = pygame.mouse.get_pos() print(volume(mouse_pos))
代码说明
- 先把鼠标X坐标赋值给变量
x,简化代码可读性 - 用
if-elif-else链式判断,每个分支只需要判断当前区间的上限即可,因为前面的条件已经排除了更小的数值 - 新增
else分支处理超出最大区间(X>1277)的情况,避免无返回值的问题
内容的提问来源于stack exchange,提问作者trueShadoWrr
相关产品推荐
相关产品推荐

