今天閑來無事看了下python基礎知識,當學到數據類型轉換的int()方法時候。發現了這么一個有意思的事情,算是IDE或是解釋器的一個小BUG。(具體原因暫不明,留待以后查找問題)
先講下環境
- 操作系統: windows10
- python版本:3.6.5
- IDE環境: pycharm edu 2018.1 x64
- 解釋器: CPython
然后 int()方法的作用
函數 | 說明 |
int(x[,base]) | j將x轉換為一個整數 |
閑話少說上代碼:
情況1:
# -*- coding:utf-8 -*- >>>age=input() >>>print(int(age)) 15
輸出正常
情況2:
# -*- coding:utf-8 -*- >>>print(int(15.6)) 15 #使用int()轉換的時候,會強制省略小數點后面的數字
輸出正常
情況3:
# -*- coding:utf-8 -*- age = input("請輸入年齡:") if int(age)>=18: print("恭喜你已經成年了") else: print("你還需要在成長")
如果用戶輸入的是正常的不帶小數點的整數字符串,那么轉換輸出沒有問題。
當用戶輸入浮點型字符串后,開始數據類型轉換時,出現了這么奇怪的報錯:
# -*- coding:utf-8 -*- age = input("請輸入年齡:") if int(age)>=18: #這里的age是字符串類型,但是在條件表達式中是作為數字對待的 print("恭喜你已經成年了") else: print("你還需要在成長") #執行以上參數后,輸入值15.6,出現以下報錯(不光是輸入帶小數點的數字字符串,只要是非整數以外的字符,均會報錯) Traceback (most recent call last): File "C:/pythonstudy/startpython/day1.py", line 6, in <module> if int(age)>=18: ValueError: invalid literal for int() with base 10: '15.6' #值錯誤:int()以10為底的無效文字:'15.6'
可是情況1輸入小數點的數字轉換的時候是沒有問題的。問題出在哪呢?
通過百度找到了解決方法
# # -*- coding:utf-8 -*-import re #引入正則模塊 age = input("請輸入年齡:") totalCount = re.sub("\D", "", age) #使用正則的sub方法過濾掉輸入的字符串中age帶的非數字字符和空的值。 if int(totalCount)>=18: print("恭喜你已經成年了") else: print("你還需要在成長")
當輸入帶有小數點的字符串的時候,不會再出現值錯誤的報錯。(但是亂輸入非數字符號還是會報錯)。但是打印totalConunt,你會發現這種方式不光去掉了字符串age中帶的非數字字符和空值,連小數點就去掉了。
但是通過如下代碼:
# -*- coding:utf-8 -*- age = int(float(input("請輸入年齡:"))) if int(age)>=18: print("恭喜你已經成年了") else: print("你還需要在成長")
你會發現輸入小數點又可以了。又不會報錯了。
初步推測,int()函數能轉換純整數數字的字符串,不帶小數點的(帶小數點就會報錯。int(方法應該是認為小數點不屬於純整數范疇))。float()能轉換純整數數字字符串或帶小數點的純浮點數字符串。