【问题标题】:Set a limitation on the returning value and number of decimals in Python在 Python 中设置返回值和小数位数的限制
【发布时间】:2017-11-20 21:38:21
【问题描述】:
import numpy as np
from scipy import interpolate
from scipy.interpolate import griddata
import itertools
xs = [0.15, 0.35, 0.50, 0.67, 0.80]
ys = [0.01, 0.02, 0.03, 0.04, 0.05]
z =  [0.60, 0.70, 0.80, 0.90, 1.00]

我有这段代码可以返回 Z 的值:

tck = interpolate.bisplrep(x, y, z, s=0)
def givemeZ(x,y):
    return interpolate.bisplev(x,y,tck),'%0.5f'
  1. 如何对不来的返回值进行限制 值大于 1?如果它高于 1,则代码将 拒绝它..

  2. 在零后给我 5 位小数,因为它返回 value+,'%0.5f'?

感谢所有帮助!

【问题讨论】:

  • 1) 你想得到什么(如果值 > 1)? 2)您使用的格式不正确。试试return '{:.5f}'.format(interpolate.bisplev(x,y,tck))
  • 这适用于小数,非常感谢

标签: python


【解决方案1】:

试试这个:

tck = interpolate.bisplrep(x, y, z, s=0)
def givemeZ(x,y):
    result = interpolate.bisplev(x,y,tck)
    return '{:.5f}'.format(min(1.0, result))

返回的结果上限为 1.0。它永远不会变大。

【讨论】:

  • return '{:.5f}'.format(min(1.0, res)) NameError: name 'res' is not defined 它给了我这个错误
  • @user8670370 这是一个错字。再试一次
【解决方案2】:

你可以返回另一个值并检查它

tck = interpolate.bisplrep(x, y, z, s=0)
def givemeZ(x,y):
    rtr = interpolate.bisplev(x,y,tck),'%0.5f'
    return round(rtr, 5) if rtr <= 1 else None
z = givemeZ(x,y)
if z is None:
    print "Z is greater than 1!"
    quit() # or other error handling

这会检查返回值 rtr 是否小于或等于 1,如果是则返回舍入值,否则返回 None。然后您可以检查None 并处理它,但是您正在处理错误。

【讨论】:

  • rtr 是一个tuple,因为它的定义方式,你不能在tuple 上做round()
  • 谢谢,我不熟悉这个功能。然而,奇怪的是,这个例子显示了不同的情况。 stackoverflow.com/questions/1977467/… 不过我会用两种形式更新我的答案。
  • 我没有看到round() 在任何tuple 上执行。你试过运行你的代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
  • 2021-12-21
  • 2012-04-14
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多