2016-09-27 84 views
1

我需要一些帮助。 我试图让我的循环工作与小数,但我的代码不会接受浮动,我不知道下一步该怎么做。任何人都可以指出我出错的地方吗?你可以在这个循环中使用浮点数吗?

这是一个代码,用于将用户定义的步长(Delta)转换成摄氏温度到华氏温度。那就是:

def main(): 

    # Handshake 
    print("This program will convert a range of Celsius degrees to") 
    print("Fahrenheit degrees based on your input.") 

    # Ask and read low end of range 
    Rangelow = eval(input("Enter the low end of your range: ")) 

    # Ask and read top end of range 
    Rangehigh = 1 + eval(input("Enter the high end of your range: ")) 

    # Ask and read Delta 
    Delta = eval(input("Enter the Delta for your range: ")) 

    #Display output 
    print("Celsius to Fahrenheit by", Delta) 
    for i in range(Rangelow, Rangehigh, Delta): 
     print(i, "    ", 9/5 * i + 32) 



main() 

这是我的意思的例子:

这一计划将一系列摄氏度转换为根据您的输入 华氏度。 输入范围的低端:3.8 输入范围的高端:14.7 输入三角洲为您范围:1.1 摄氏度到华氏1.1 回溯(最近通话最后一个): 文件“C:\用户\ jarre \ Desktop \ Python程序\ Conversion.py“,第27行,在 main() 文件”C:\ Users \ jarre \ Desktop \ Python Programs \ Conversion.py“,第22行,主要为 范围内(Rangelow,Rangehigh + 1,Delta): TypeError:'float'对象不能被解释为整数

我应该注意到问题似乎在于输入,输出没有问题抛出十进制后输入已被转换。

+1

当你说“我的代码不会接受浮动”,这是什么意思?如果有回溯,请编辑您的问题并添加它。 – Gerrat

+0

查看文档:https://docs.python.org/2/library/functions.html ...参数必须是纯整数。# – blacksite

+1

附注:请勿在用户上使用'eval'提供的输入。如果你期望'float',那么使用'float'而不是'eval'。如果你想允许'int'或'float'(或任何Python文字),你可以使用['ast.literal_eval'](https://docs.python.org/3/library/ast.html#ast。 literal_eval),它可以安全地处理任意的Python字面值,而无需打开执行任意代码。 – ShadowRanger

回答

2

不能使用内置的做浮点/小数增量,但它是很容易构建自己的发电机:

def decimal_range(start, stop, increment): 
    while start < stop: # and not math.isclose(start, stop): Py>3.5 
     yield start 
     start += increment 

for i in decimal_range(Rangelow, Rangehigh, Delta): 
    ... 

或者你可以使用numpy但这种感觉就像一把大锤开裂螺母:

import numpy as np 
for i in np.arange(Rangelow, Rangehigh, Delta): 
    ... 
+0

注意:如果您在很多情况下将它与“float”一起使用,则这不会像您所期望的那样。例如,如果参数为“0.2,0.3,0.1”,则会得到一个输出(正确排除“大致为0.3”的输出)。但是如果你通过'0.7,0.8,0.1',你会得到两个输出,'0.7'和'0.7999999999999 ...'。顾名思义,唯一安全的方法就是直接将输入字符串转换为decimal.Decimal而不是float。 – ShadowRanger

+0

是的,浮动舍入错误是一个问题 - 所以同意小数是要走的路。你可以使用'math.isclose()'修复一些Py> 3.5的错误 – AChampion

+0

我该如何实现这个?我很难解决这个问题 – Jarbcd

相关问题