Python绘图时range函数报float对象无法解释为整数错误求助
问题根因
Python 内置的 range() 函数仅支持整数类型的起始值、终止值和步长参数,你传入的 1e6、1e5 是浮点型数值,因此触发类型错误。
除此之外你的代码还有两处逻辑错误会导致无输出:
- 函数
f_transition_turbulent定义放在了for循环内部,且return f4语句写在了列表追加操作之前,return后的代码永远不会执行 - 循环内的代码、列表追加操作的缩进完全错误,不会被正常执行
解决步骤
- 替换
range()为numpy.arange(),该函数支持浮点参数,适合绘图时生成均匀序列;也可以选择将1e6、1e5强制转换为整数传入range() - 把函数定义移到循环外部,调整代码顺序,调用函数拿到返回值后再追加到列表
- 修正所有缩进错误,保证逻辑执行顺序正确
修正后可运行代码
import numpy as np import matplotlib.pyplot as plt # 函数定义移到循环外部 def f_transition_turbulent(Re,ftol=0.001, MaxIter=1000): error=10 Iter_num=0 f0=0.3164/(Re)**0.25 while error>ftol and Iter_num<MaxIter: f4=1/(2*np.log(Re*np.sqrt(f0))-0.8)**2 error=abs(f4-f0) Iter_num=Iter_num+1 f0=f4 return f4 f5=[] r4=[] # 用np.arange生成序列,也可替换为 range(2300, int(1e6), int(1e5)) for Re in np.arange(2300, 1e6, 1e5, dtype=int): f4 = f_transition_turbulent(Re) f5.append(f4) r4.append(Re) plt.loglog(r4,f5,color='b',lw=2) plt.show()
内容的提问来源于stack exchange,提问作者Rama Krishna
相关产品推荐
相关产品推荐

