今天發現一個很好玩的東西

一開始根本不可能發現,要試玩一下才會知道

一般來說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是不可直接算的,因為不管哪一種進位方式都不會出現小數點。

這也說明為什麼小數點數值需要另外分成一類(浮點值),因為在電腦的邏輯裡面他是需要用其他方式計算而成的。

 

 

 

 

文章標籤

Rebus 發表在 痞客邦 PIXNET 留言(0) 人氣()