Python - 根据计算值返回Float或Integer

时间:2014-10-16 04:54:27

标签: python

我是Python的新手,并且一直在编写简单的程序来熟悉这门语言。

我想要确定的是如何动态计算输出值类型并相应地返回它们。我可以让代码准确输出值的唯一方法是硬编码float类型的转换,但我希望能够有动态输出。任何指向正确方向的人都会非常感激!

示例输入/输出:

    *输入= 0,输出= 32.0(所需输出:32)
      *输入= 1,输出= 33.8

      代码示例:

      # Definite functions
      def is_number(x):
          try:
              return int(x)
          except ValueError:
              try:
                  return float(x)
              except ValueError:
                  return False
      
      
      def calc_fahrenheit(x):
          try:
              return (is_number(x) * 9.0) / 5 + 32
          except:
              raise
      
      # Runtime Code
      celsius = raw_input("Enter Celsius Temperature: ")
      
      while(calc_fahrenheit(celsius) == False):
          celsius = raw_input("Please enter valid Celsuis Temperature: ")
      
      print calc_fahrenheit(celsius)
      

4 个答案:

答案 0 :(得分:1)

坚持你的方法,我会推荐这个。不是动态更改类型,而是使用%g格式化结果,如果它是1,则显示为整数,因此一直使用float。

# Definite functions
def to_number(x):
    try:
        return float(x)
    except ValueError:
        return False

def calc_fahrenheit(x):
    return x * 9.0 / 5 + 32

# Runtime Code
celsius = to_number(raw_input("Enter Celsius Temperature: "))
while not celsius:
    celsius = to_number(raw_input("Please enter valid Celsuis Temperature: "))

print 'Fahrenheit: %g' % calc_fahrenheit(celsius)

此外,我认为to_number()is_number()的更具描述性的名称,已从calc_fahrenheit()函数中删除,因为它并非真正属于那里但在验证循环中 - 已经成了Pythonic。

希望你能追求的是什么。

答案 1 :(得分:0)

不确定是否有更方便的方法。你可以这样做:

if abs(output - round(output)) < 0.0000001:
    return int(output)
else:
    return output

答案 2 :(得分:0)

只需使用浮点数,运算符就可以按照预期的方式在floatint上运行 如果你只是记得要  from __future__ import division

你的attmept - 不是非常pythonic - 可以写成如下所示。

while True:
    try:
        celsius = float(raw_input("Enter Celsius Temperature: "))
        print('%g' % ((celsius * 9.0) / 5 + 32))
        break
    except ValueError:
        print("woops, Try again :)\n")

答案 3 :(得分:0)

您的is_number()功能已完成(尽管False0相同,因此如果有人输入非数字字符串,则会将其视为已输入{ {1}}),但实际上并不是你需要的。

此外,0被错误命名,因为它实际上是字符串转换为数字。

然后,您输入的任何数字都会转换为is_number()(因为您正在使用float进行计算),因此您需要执行float / int检查输出时间:

最后,请考虑Floating Point Arithmetic: Issues and Limitations - 由于舍入错误,浮点计算可能会产生float之类的结果偏离实际结果23.000000000001

所以你应该做像

这样的事情
23