今天發現一個很好玩的東西
一開始根本不可能發現,要試玩一下才會知道
一般來說int()可以取浮點數的整數值
例
>>>int(23.222)
23
float()則可以幫助整數變成浮點,加上.0
例
>>>float(23)
23.0
input()則是可以讓使用者鍵入任何東西,出來的東西直接是string
例
>>>spam=input()
23.332
>>>spam
'23.332'
但是這邊很有趣,如果想要把input出來的str轉成可加減的數字int 或 float,是不可以兩種直接互轉的,你必須先猜出使用者鍵入的int 或 float 才可以轉換
例
>>>spam=input()
23.223 #此時spam='23.223',而我想要取整數作為我的spam來加減
>>>spam=int(spam) #是錯的!!!
>>>spam=int(float(spam))#才是對的!!!!
>>>spam
23
簡而言之,從字串到整數中間需要一個自行辨別的過程。
>>>int('10')
10
>>>int('10.01')
Traceback (most recent call last):
File "<pyshell#92>", line 1, in <module>
int('10.01')
ValueError: invalid literal for int() with base 10: '10.01'
然而,對於浮點數來說就比較沒有錯誤的問題,因為他也可以直接把整數代換成.0
>>>float('10.01')
10.01
>>>float('10')
10.0
由於非常好奇所以又看了一下documentary
發現int()在數字用法跟字串用法是不一樣的,int(number)是直接設定成取整數, 但 int(string,base) 則可以任意更換base進位計算十進位的相對值
>>>int(10.23)
10
>>>int('111',2) 則可以算出在2進位下的111在10進位下等於多少
7
>>>int('A',15)
10
在16進位有規定從10~15的數字被替換成A~F,所以電腦認得可以演算
但如果是20以上進位呢...繼續用英文字母代換到19!!
>>>int('I',20)
18
這樣理解過後就可以明白為什麼有小數點的string是不可直接算的,因為不管哪一種進位方式都不會出現小數點。
這也說明為什麼小數點數值需要另外分成一類(浮點值),因為在電腦的邏輯裡面他是需要用其他方式計算而成的。
留言列表