2015-02-06 81 views
0

我寫了一個程序來計算一個數字的階乘完美的工作,但當測試我輸入一個浮點數時崩潰。 我的目標是接受一個浮點數,但沒有計算。由於該程序將接受但返回「錯誤輸入,只有整數被接受」。 我已經嘗試了多個聲明,但它只適用於我在聲明中輸入的數字。所以我想也許應該建立一些東西,也許可以通過命名一些花車並做某種減法。但我迷路了。 這裏是程序我至今不包括浮動聲明:我怎樣才能阻止我的python程序崩潰

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 2015-02-06 16:40:54

+0

請參閱[這篇文章](http://stackoverflow.com/questions/4541155/check-if-a-number-is-int-or-float)如何檢查輸入的數字是積分。 – RedX 2015-02-06 16:42:23

+0

請包括你試圖解決浮點問題,以及它如何「崩潰」。你有沒有捕獲異常? – 2015-02-06 16:42:54

回答

-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

您可以添加一些解釋嗎?裸碼塊是不好的。 – 2015-02-06 16:51:53

+0

模塊操作符'%'將返回操作的其餘部分。所以,9%1是0,而9.1%1是0.1。一旦我們確定了它的浮點數,你可以將它轉換爲int。 – 2015-02-06 17:14:34

+0

似乎沒有必要。你應該嘗試轉換爲'int',並在失敗時捕獲'ValueError'。你在這裏保存的唯一情況是,如果用戶給你一個浮點數,如果他們給你一個非數字的話,它會觸發一個不同的錯誤信息。 – 2015-02-06 17:16:43

2

你應該使用try/catch塊,因爲int('3.2')(或任何其它浮動字符串)會產生一個錯誤。例如:

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將返回整數部分。

相關問題