2015-12-15 61 views
1

我正在編寫詢問用戶任何正整數的代碼。如果用戶輸入的不是正整數,則不能接受它,並且一次又一次地向用戶詢問正整數,直到用戶輸入正整數。其次,代碼要求用戶輸入一個介於0和1之間的浮點數,然後檢查用戶輸入的內容是否是0到1之間的浮點數。如果它不在0和1之間,它必須再次詢問並再次詢問直到用戶輸入要求的內容。然後將其舍入到最接近的2位小數位。爲什麼Python代碼生成ValueError?

這裏是我的代碼:

num1 = int(input("Enter a positive integer: ")) 
while num1 < 0 or not isinstance(num1 , int): 
    print("Invalid!") 
    num1 = int(input("Enter a positive integer: ")) 
num2 = float(input("Enter a decimal between 0 and 1: ")) 
while num2 < 0 or num2 > 1 or not isinstance(num2 , float): 
    print("Invalid!") 
    num2 = float(input("Enter a decimal between 0 and 1: ")) 

當我運行它,然後輸入一個字符串,它說ValueError異常。

我必須使用錯誤處理嗎?

回答

1

ValueError由構造函數intfloat引發。

while True: 
    try: 
     num1 = int(input("Enter a positive integer: ")) 
     if num1 >= 0: 
      break 
    except ValueError: 
     pass 
    print("Invalid!") 

while True: 
    try: 
     num2 = float(input("Enter a decimal between 0 and 1: ")) 
     if num2 >= 0 and num2 <= 1: 
      break 
    except ValueError: 
     pass 
    print("Invalid!") 
+0

= [] =太謝謝你了! –

+0

我想,有一個問題,如果用戶輸入一個float到'num1',它應該重新輸入。 – Hooting

+0

@Hooting int('1.1')拋出ValueError,所以再次提示。據我瞭解,這是預期的行爲。 –

0

如果試圖以下列方式投一個字符串:

>>> text = int("Blibla") 

Python解釋器無法處理它。

Traceback (most recent call last): 
File "<pyshell#3>", line 1, in <module> 
text = int("Blibla") 
ValueError: invalid literal for int() with base 10: 'Blibla' 
>>> 

會轉而使用try /除了捕捉任何ValueErrors:

num1 = 'error' 
while not isinstance(num1,int) and num1 == 'error': 
    try: 
     num1 = int(input("Enter a positive integer: ")) 
     print("You input : {}".format(num1)) 
    except ValueError: 
     print("Invalid!") 
相關問題