Python使用while循环输出结果绘图返回空图且报值错误如何解决
问题原因
- 缩进错误:原代码中函数定义下的条件判断、while循环内的赋值语句都没有正确缩进,Python依赖缩进区分代码块,运行时会直接报错。
- 未存储迭代过程值:while循环运行过程中仅不断更新
q的取值,没有留存每一步的计算结果,循环结束后q仅为最终值1(单个标量),没有可用于绘图的序列数据。 - 绘图数据维度不匹配:你定义的
i是包含3个元素的数组,和单个值q长度不一致,plt.plot要求传入的x、y序列长度完全匹配,因此会抛出值错误,无法生成图像。
修正后的完整代码
# 定义函数f(n) def f(n): if (n % 2) == 0: return n/2 else: return (3*n + 1)/2 # 循环迭代并存储结果 q = 63 q_list = [q] while q != 1: q = f(q) q_list.append(q) # 绘图 import numpy as np import matplotlib.pyplot as plt # 用迭代次数作为x轴,和q_list长度匹配 x = np.arange(len(q_list)) plt.plot(x, q_list) plt.xlabel('迭代次数') plt.ylabel('q取值') plt.show()
运行上述代码即可正常生成迭代过程的变化曲线。
内容的提问来源于stack exchange,提问作者Mackenzie Watts
相关产品推荐
相关产品推荐

