我是Python的新手,并且一直在编写简单的程序来熟悉这门语言。
我想要确定的是如何动态计算输出值类型并相应地返回它们。我可以让代码准确输出值的唯一方法是硬编码float类型的转换,但我希望能够有动态输出。任何指向正确方向的人都会非常感激!
示例输入/输出:
代码示例:
# 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)
答案 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)
只需使用浮点数,运算符就可以按照预期的方式在float
和int
上运行
如果你只是记得要
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()
功能已完成(尽管False
与0
相同,因此如果有人输入非数字字符串,则会将其视为已输入{ {1}}),但实际上并不是你需要的。
此外,0
被错误命名,因为它实际上是将字符串转换为数字。
然后,您输入的任何数字都会转换为is_number()
(因为您正在使用float
进行计算),因此您需要执行float
/ int
检查输出时间:
最后,请考虑Floating Point Arithmetic: Issues and Limitations - 由于舍入错误,浮点计算可能会产生float
之类的结果偏离实际结果23.000000000001
。
所以你应该做像
这样的事情23