2014-05-05 124 views
1

如何確保用戶只輸入了一個有兩位小數的浮點數。數字不能是4或4.999,它必須是4.00或4.99,否則會出現錯誤。Python:用戶輸入數字後只有兩位小數

while looping: 
    try: 
     number = float(input("Number: ")) 

     string_number = (str(number)).split(".") 
     check_length = len(string_number) 
     if check_length != 2: 
      print ("ERROR!") 
      looping = True 
     else: 
      looping = False 

    except ValueError: 
     looping = True 
+0

可以使用功能全面的自動轉換爲浮動與2位小數。 – shantanoo

回答

1

您目前只檢查是否只有一個小數點。

number.split(".")將返回一個列表。如果number4.323,它將返回['4', '323']

你真的想在你的if條款檢查內容是第二個元素的長度爲2

if len(string_number[1]) != 2: 
+0

由於某種原因,它仍然不起作用 –

+0

您有什麼樣的問題? – Hamatti

1

檢查數的第二部分。

while True: 
    try: 
     number = input('Number:') 
     integral, fractional = number.split('.') 
     number = float(number) 
     if len(fractional) == 2: 
      break 
    except ValueError: 
     pass 
    print('ERROR!') 
+0

在寫本質上相同的東西之前沒有看到這個。只需添加'float(number)',否則不會有值錯誤(除非沒有'.') – dawg

+0

@dawg,謝謝您的評論。我更新了代碼以包含'float(number)'。順便說一句,如果不完全是2部分(例如'1','1.2.3',..),那麼多個賦值也會引發'ValueError' [ – falsetru

+0

]您需要將float()移到小數部分測試的上方。那麼,根據定義,不會有多個時期。那麼在第二次測試中缺少一段時間也會導致一個'ValueError'然後它在邏輯上就完成了。 – dawg

0
looping = True 
while looping: 
    number = input("Number: ") 
    string_number = number.split(".") 
    if len(string_number) != 2: 
     print ("ERROR: Needs exactly one decimal point!") 
     looping = True 
    elif len(string_number[1]) != 2: 
     print ("ERROR: Two numbers are required after decimal point!") 
     looping = True 
    else: 
     try: 
      number = float(number) 
      looping = False 
     except ValueError: 
      print("ERROR: Number is not valid!") 
      looping = True 

製作一些小的改動消除了可變looping的需要。由於我們的目標是獲得一個有效的數字,我們可以測試爲:

number = None 
while not number: 
    s = input("Number: ") 
    string_number = s.split(".") 
    if len(string_number) != 2: 
     print ("ERROR: Needs exactly one decimal point!") 
     continue 
    elif len(string_number[1]) != 2: 
     print ("ERROR: Two numbers are required after decimal point!") 
     continue 
    try: 
     number = float(s) 
    except ValueError: 
     print("ERROR: Number is not valid!") 
+0

爲什麼除了之後嘗試? –

+0

@novicecoder假設用戶輸入了'1.50'。如果將其轉換爲浮點數然後將其轉換爲字符串,結果將爲1.5,這會錯誤地忽略2個小數點的要求。通過稍後進行轉換,我們確保我們分析的輸入與用戶提供的輸入相同。 – John1024

+0

但如果用戶輸入4,那麼它會給出一個錯誤,因爲沒有索引1 –

0

我會寫這樣:

while True: 
    try: 
     str_num=input("Number: ") 
     num=float(str_num)   # ValueError if cannot be converted 
     i, f=str_num.split('.')  # also ValueError if not two parts 
     if len(f)==2: 
      break     # we are done!!! 
    except ValueError: 
     pass 

    print('ERROR! ')     # either cannot be converted or not 2 decimal places 

print(num) 
相關問題