2016-09-27 4 views
1

도움이 필요합니다. for 루프에서 소수 자릿수를 사용하려고하지만 코드에서 수레가 허용되지 않고 다음에해야 할 일을 잘 모릅니다. 아무도 내가 잘못한 곳을 지적 할 수 있습니까?for for 루프에서 float 숫자를 사용할 수 있습니까?

사용자가 정의한 섭씨 (화씨)로 화씨 (섭씨)로 변환하는 데 사용되는 코드입니다. 여기있다 :

이 프로그램은 사용자의 입력에 따라 화씨도 섭씨 학위의 범위를 변환합니다 :

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() 

이 무슨 뜻인지의 예입니다. 당신의 범위의 하한을 입력 : 14.7이 당신의 범위의 델타를 입력 : 1.1 역 추적하여 화씨 1.1 섭씨 (마지막으로 가장 최근 통화) : 파일 "C : 3.8 이 범위의 하이 엔드를 입력 \ 메인에있는 의 파일 "C : \ Users \ jarre \ Desktop \ Python Programs \ Conversion.py"파일 (줄 22) 의 사용자 \ jarre \ Desktop \ Python 프로그램 \ Conversion.py " TypeError : 'float'객체를 정수로 해석 할 수 없습니다.

이 문제는 입력과 관련이있는 것처럼 보일뿐 출력에 문제가 없음을 유의해야합니다 (예 : Rangelow, Rangehigh + 1, Delta). 십진법 후 입력이 변환되었습니다.

+1

"내 코드는 수레를 허용하지 않습니다"라고 할 때, 그 의미는 무엇입니까? 역 추적이있는 경우 질문을 편집하여 추가하십시오. – Gerrat

+0

문서 체크 아웃 : https : //docs.python.org/2/library/functions.html ...'인수는 일반 정수 여야합니다 .' – blacksite

+1

사이드 노트 : 사용자에게 'eval'을 사용하지 마십시오. 제공 입력. 'float'을 원하면'eval' 대신에'float'을 사용하십시오. 'int' 또는'float' (또는 파이썬 리터럴)을 허용하려면 ['ast.literal_eval'] (https://docs.python.org/3/library/ast.html#ast. literal_eval). 임의의 코드를 실행하지 않고도 임의의 파이썬 리터럴을 안전하게 처리 할 수 ​​있습니다. 역 추적 (마지막으로 가장 최근 통화) : – 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 ... '의 두 가지 출력을 얻게됩니다. 이름에서 알 수 있듯이, 이것을 사용하는 유일한 안전한 방법은 입력 문자열을'float'이 아닌'decimal.Decimal'으로 직접 변환하는 것입니다. – ShadowRanger

+0

예, 부동 소수점 올림 오류는 문제입니다. 동의합니다. Decimal이 (가) 길입니다. '> math.isclose()를 사용하여 Py> 3.5에 대한 몇 가지 오류를 수정할 수 있습니다. – AChampion

+0

어떻게 구현합니까? 이 문제를 해결하는 데 어려움을 겪고 있습니다 – Jarbcd

관련 문제