標籤:with 模組 x64 ack 作用 字串類 使用者 call char
今天閑來無事看了下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()能轉換純整數數字字串或帶小數點的純浮點數字串。
python學習之路之int()奇怪的報錯