Jupyter Notebook中Python条件执行绘图代码失效问题求助
Jupyter Notebook条件绘图不执行问题解决
问题说明
在Mac系统的Anaconda环境下运行Jupyter Notebook单元格时,出现以下异常:
- 需求为:询问用户是否查看指定图表,输入
yes则执行对应绘图代码,输入no则跳过并进入下一个问题 - 实际运行时,输入
yes后程序直接跳转至下一个问题,未执行绘图代码,但该绘图代码在if语句外可正常运行 - 原代码如下:
yeses=['yes','Yes','YES','y','Y'] nos=['no','No','NO','n','N'] p = input("Would you like to see the signal pattern of the song? (yes/no): ") f = input("Would you like to see a plot of all the frequencies used in this song? (yes/no): ") s = input("Would you like to see a spectrogram of the song? (yes/no): ") if p in yeses: plt.subplot(2,1,1) plt.plot(time, sound[:,0], 'r') plt.xlabel("time, s [left channel]") plt.ylabel("signal, relative units") plt.subplot(2,1,2) plt.plot(time, sound[:,1], 'b') plt.xlabel("time, s [right channel]") plt.ylabel("signal, relative units") plt.tight_layout() plt.show() else: return None
问题原因
- 代码执行顺序错误:原代码先一次性收集完所有三个问题的输入,再执行第一个绘图的条件判断。这意味着用户输入第一个问题的
yes后,程序会继续要求输入后两个问题的答案,只有当所有输入完成后才会运行绘图代码,导致用户误以为“直接跳转下一个问题,未执行绘图”。 - 无效的
return语句:在Jupyter Notebook的单元格中,return None是非法操作(单元格并非函数),会导致语法错误或提前终止执行,干扰后续代码逻辑。
修复后的代码
# 确保matplotlib在Jupyter中正常显示(旧版本需添加,新版本可省略) %matplotlib inline import matplotlib.pyplot as plt yeses=['yes','Yes','YES','y','Y'] nos=['no','No','NO','n','N'] # 第一个问题:信号波形图 p = input("是否查看歌曲的信号波形?(yes/no): ") if p in yeses: plt.subplot(2,1,1) plt.plot(time, sound[:,0], 'r') plt.xlabel("时间, s [左声道]") plt.ylabel("信号, 相对单位") plt.subplot(2,1,2) plt.plot(time, sound[:,1], 'b') plt.xlabel("时间, s [右声道]") plt.ylabel("信号, 相对单位") plt.tight_layout() plt.show() # 第二个问题:频率分布图 f = input("是否查看歌曲的所有频率分布?(yes/no): ") if f in yeses: # 填入对应频率绘图的代码 pass # 第三个问题:频谱图 s = input("是否查看歌曲的频谱图?(yes/no): ") if s in yeses: # 填入对应频谱图绘图的代码 pass
关键修复点
- 调整执行顺序:每个问题的输入与条件判断一一对应,输入后立即判断是否执行绘图,再进入下一个问题
- 移除无效语句:删除
else分支中的return None,跳过绘图逻辑即可直接进入下一个问题 - 添加显示配置:
%matplotlib inline确保绘图在Jupyter单元格中正常显示(部分新版本Jupyter已默认支持,可按需保留)
内容的提问来源于stack exchange,提问作者engrmjr.1123
相关产品推荐
相关产品推荐

