Python中能否在while语句内赋值实现matplotlib.ginput点收集需求
问题解答
核心结论
Python 3.8及以上版本支持在while语句中直接完成变量赋值,你需要使用**海象运算符(:=)**实现该逻辑,低于3.8的版本则需要拆分赋值和判断步骤。
原代码问题修正
你的原始代码存在几个明显问题:
- 方法名调用错误,不存在
plt.input()方法,你需要调用的是plt.ginput(1)获取点击坐标 plt.ginput(1)返回的是长度为1的坐标列表,需要取出第一个元素再做等值判断- 初始获取的第一个点没有加入存储列表,逻辑存在缺失
实现代码
3.8+ 海象运算符写法(符合你要的while内赋值需求)
import matplotlib.pyplot as plt last_point = None point_list = [] # 初始化空白画布 plt.plot() plt.title("点击选点,连续两次点击相同位置结束") # 直接在while条件中完成actual_point的赋值和判断 while (actual_point := plt.ginput(1)[0]) != last_point: point_list.append(actual_point) last_point = actual_point plt.close() print("采集到的坐标列表:", point_list)
低版本兼容写法
如果你的Python版本低于3.8不支持海象运算符,用常规拆分写法即可:
import matplotlib.pyplot as plt last_point = None point_list = [] plt.plot() plt.title("点击选点,连续两次点击相同位置结束") while True: actual_point = plt.ginput(1)[0] if actual_point == last_point: break point_list.append(actual_point) last_point = actual_point plt.close() print("采集到的坐标列表:", point_list)
补充说明
你也可以根据需求调整结束逻辑,比如设置点击右键直接结束选点,无需判断两次点击坐标是否一致。
内容的提问来源于stack exchange,提问作者Ulises Bussi
相关产品推荐
相关产品推荐

