2017-03-21 15 views
0

간단한 제곱근 계산기를 만들고 싶었습니다.파이썬 스퀘어 루트 계산기 오류

num = input('Enter a number and hit enter: ') 

if len(num) > 0 and num.isdigit(): 
    new = (num**0.5) 
    print(new) 
else: 
    print('You did not enter a valid number.') 
내가 잘못 아무 짓도 한 것처럼은 보이지 않는다

그러나, 나는 프로그램을 실행하려고 내가 숫자 입력을 한 후, 나는 다음과 같은 오류 메시지가 직면하고 때

Traceback (most recent call last): 
File "/Users/username/Documents/Coding/squareroot.py", line 4, in <module> 
new = (num**0.5) 
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'float' 

Process finished with exit code 1 
+1

당신은 입력 * * 숫자로 변환 할 수 있다면 신중하게 다음, 확인 * 실제로 그렇게 귀찮게하지 않습니다 * : 은 참조! – jonrsharpe

+0

또한 '1.5'또는 '1E10'과 같은 숫자는 유효하지 않습니다 - 이유는 무엇입니까? 파이썬적인 방법은 입력을'float'로 변환하려고 시도하고 예외가 발생할 때만 오류 메시지를 출력하는 것입니다. –

+0

가능한 [TypeError : - : 'str'및 'int'에 대해 지원되지 않는 피연산자 유형] (http://stackoverflow.com/questions/2376464/typeerror-unsupported-operand-types-for-str-and) -int) –

답변

3

이 솔루션을 사용할 수 있습니다. 여기서 시도하고 잡는 것은 모든 종류의 입력을 처리 할 수 ​​있습니다. 그래서 당신의 프로그램은 결코 실패하지 않을 것입니다. 그리고 입력이 float로 변환되기 때문입니다. 유형 관련 오류가 발생하지 않습니다.

try: 
    num = float(input('Enter a positive number and hit enter: ')) 
    if num >= 0: 
     new = (num**0.5) 
    print(new) 

except: 
    print('You did not enter a valid number.') 
0

입력 함수는 문자열 값을 반환합니다. 그래서 제대로 해석해야합니다.

num = raw_input('Enter a number and hit enter: ') 

if num.isdigit(): 
    if int(num) > 0: 
     new = (int(num)**0.5) 
     print(new) 
else: 
    print('You did not enter a valid number.') 
+0

그러면 두 번째 줄이 실패합니다. –

+0

흠, 나는 그것을 시도하고 그것은 그 오류를 배제. 역 추적 (마지막으로 가장 최근 통화) : 그러나, 나는 이제 또 다른 오류 메시지가 제공하고 렌 경우 에, 파일 "/Users/username/Documents/Coding/squareroot.py", 3 호선 (NUM)> 0 and num.isdigit() : TypeError : 'int'유형의 객체에는 len()이 없습니다. – PythonPie

+0

@ShivkumarKondi 내 대답과 당신의 차이점은 무엇입니까? – eyllanesc

0

간단한 계산을 위해 수학 모듈을 사용하십시오. Math module Documentation.

import math 
num = raw_input('Enter a number and hit enter: ') 

if num.isdigit(): 
    num = float(num) 
    new = math.sqrt(num) 
    print(new) 
else: 
    print('You did not enter a valid number.')