2015-02-06 2 views
0

숫자의 계승을 계산하는 프로그램을 작성했지만 테스트를 위해 부동 소수점 숫자를 입력하면 충돌이 발생합니다. 목표는 부동 소수점을 수락하지만 계산하지 않는 것입니다. 프로그램이 수락하지만 "잘못된 항목"과 같은 것을 반환하므로 정수 만 허용됩니다. 여러 문장을 시도했지만 문장에 넣은 숫자에 대해서만 작동합니다. 그래서 아마 뭔가를 만들어야 할 것 같았습니다. 어쩌면 일부 플로팅의 이름을 지정하고 일종의 빼기를 수행했을 것입니다. 그러나 나는 길을 잃는다. int('3.2') (또는 다른 플로트 문자열)에서 오류가 발생하기 때문에,파이썬 프로그램이 멈추는 것을 막을 수있는 방법

def main(): 
# take input from the user 
     num = int(input("Enter a number: ")) 
     factorial = 1 
     if num > 100: 
      print("Bad entry. It should be an integer less than or equal to 100!") 
      print("Please try again: ") 
     elif num == 0: 
      print("The factorial of 0 is 1") 
     elif num < 0: 
      print("Bad entry. It should be an integer superior than or equal to 0!") 
      print("Please try again: ") 
     else: 
      for i in range(1,num + 1): 
       factorial = factorial*i 
      print("The factorial of",num,"is",factorial) 

main() 
+2

수정 확인 – ForceBru

+0

입력 한 번호를 확인하는 방법은 [이 게시물을 참조하십시오 (http://stackoverflow.com/questions/4541155/check-if-a-number-is-int-or-float) 참조). 완전한. – RedX

+0

부동 소수점 문제를 해결하기 위해 시도한 것을 포함하고 그것이 "충돌"하는 방법을 포함하십시오. 잡히지 않는 예외가 있습니까? –

답변

-1
def main(): 
    # take input from the user 
    num = float(input("Enter a number: ")) 
    if (num%1 != 0): 
     print("Bad entry, only integers are accepted.") 
     return 

    num = int(num) 
    factorial = 1 
    if num > 100: 
     print("Bad entry. It should be an integer less than or equal to 100!") 
     print("Please try again: ") 
    elif num == 0: 
     print("The factorial of 0 is 1") 
    elif num < 0: 
     print("Bad entry. It should be an integer superior than or equal to 0!") 
     print("Please try again: ") 
    else: 
     for i in range(1,num + 1): 
      factorial = factorial*i 
     print("The factorial of",num,"is",factorial) 

main() 
+0

몇 가지 설명을 추가 할 수 있습니까? 코드 블록이 잘못되었습니다. –

+0

모듈 연산자 '%'는 나머지 연산을 반환합니다. 따라서 9 % 1은 0이고 9.1 % 1은 0.1입니다. 일단 우리가 float를 int로 변환 할 수 있는지 결정했다. –

+0

불필요한 것 같습니다. 실패 할 경우'int'로 변환하고'ValueError'를 잡아야 만합니다. 여기에 자신을 저장하는 유일한 경우는 사용자가 부동 소수점을 제공하는 경우 숫자가 아닌 숫자를 제공하면 맨 추적 코드보다 다른 오류 메시지가 트리거됩니다. –

2

당신은 try/catch 블록을 사용해야합니다 여기에 지금까지 부동 문을 포함하지 않고 가지고있는 프로그램입니다. 예를 들면 : 많은 분들이 제안

try: num = int(input('Enter a number...')) 
except ValueError: 
    print 'We only accept integers.' 
    return 
0

, 당신은 try/except 블록을 사용한다. 당신이 "6.12" 같은 사용자 입력을받을 그냥 정수 부분에서 계산할 그러나, 당신은 수행해야합니다

user_in = "6.12" # or whatever the result from the input(...) call is 
user_in = int(float(user_in)) # 6 
int 정수와 같은 아니라 문자열에서 작동 할 수 있지만, 부동 소수점 숫자에서 작동 할 수 있습니다

. 문자열에 float을 호출하면 부동 소수점 숫자가 제공되고 해당 부동 소수점 숫자에 int을 호출하면 정수 부분이 반환됩니다.

관련 문제