計算機基礎 進製轉換(利用python完成)筆記

2021-10-03 18:28:33 字數 4719 閱讀 3027

非計算機專業專業,自學python,記錄一些有意思的**。

因為老師講進製轉換,突發奇想想寫乙個程式能自主轉換(雖然網上有了,但是自己琢磨過**才有意思)

這個程式的使用範圍是2進製到36進製的換算(因為英文本母就只有26個,如果超過36字母就要挑選其他的字元來幫忙了)

def

check

(num, base, target)

:# 待轉換數字,當前進製,目標進製

# 判斷輸入是否有效,對所有的輸入都進行檢查

iftype

(base)

isnot

intor base <

2or base >

36or

type

(target)

isnot

intor target <

2or target >36:

print

('非法進製數!'

)return

false

iftype

(num)

isint

ortype

(num)

isfloat

: num =

str(num)

.upper(

)elif

type

(num)

isstr

andlen

(num)!=0

: num = num.upper(

)else

:print

('非數字輸入!'

)return

false

if num.count(

'.')

>1:

print

('多個小數點!'

)return

false

ifnot num.replace(

'.','')

.isalnum():

# isalnum() 方法檢測字串是否由字母和數字組成。如果 string 至少有乙個字元並且所有字元都是字母或數字則返回 true,否則返回 false

print

('含有其他字元!'

)return

false

for c in num.replace(

'.','')

:if trans(c)

>= base:

print

('字元超過進製允許!'

)return

false

while

len(num)

>1:

if num[0]

=='0'

and num[1]

!='.'

: num = num[1:

]else

:break

return num

沒錯,看到第一行,我也是很懵逼的,但是仔細一分析,原作者考慮的好細節啊!如果去打遊戲,估計肯定是王者級別的選手。

裡面選用的isalnum() 方法。

它的方法是檢測字串是否由字母和數字組成。如果 string 至少有乙個字元並且所有字元都是字母或數字則返回 true,否則返回 false

str

="this2009"

# 字元中沒有空格

print

(str

.isalnum())

str=

"this is string example....wow!!!"

;print

(str

.isalnum())

'''輸出結果:

true

false

'''

將輸入的數字轉換為輸出的字母或者是將輸入的字母轉換為數字,直接上**。

def

trans

(num)

:# 輸入數字換為字母或輸入字母轉換為數字

iftype

(num)

==int

:if num <10:

return

str(num)

else

:return

chr(

ord(

'a')

+ num -10)

else

:if num.isdigit():

return

int(num)

else

:return

ord(num)

-ord

('a')+

10

利用型別來判斷選擇轉換方式

裡面出現了isdigit()方法,作用是檢測字串是否由字母和數字組成檢測字串是否只由數字組成。

返回值:如果字串只包含數字則返回 true 否則返回 false。

str

="123456"

# only digit in this string

print

(str

.isdigit())

str=

"this is string example....wow!!!"

print

(str

.isdigit())

'''輸出結果:

true

false

'''

進行進製轉換的內容了

def

basechange

(num, base, target, precision=17)

:# 待轉換數字,當前進製,目標進製,精度

num = check(num, base, target)

if num is

false

:return

none

point = num.find(

'.')

if point ==-1

: point =

len(num)

radix = num.replace(

'.','')

if target ==10:

int_part = radix[

:point][:

:-1]

frac_part = radix[point:

] s =

0 ss =

0for i in

range

(len

(int_part)):

s += trans(int_part[i]

)* base ** i

for i in

range

(len

(frac_part)):

ss += trans(frac_part[i]

)/ base **

(i +1)

return

str(s)

+str

(ss)[1

:]elif base ==10:

int_part =

int(radix[

:point]

) frac_part =

float

('0.'

+ radix[point:])

s =''while

true

: s += trans(int_part % target)

int_part //= target

if int_part ==0:

break

s = s[::

-1]if frac_part !=0:

s +=

'.' ct =

0while frac_part !=

0and ct < precision:

frac_part *= target

s += trans(

int(frac_part)

) frac_part -=

int(frac_part)

ct +=

1return s

else

:return basechange(basechange(num, base,

10, precision=precision),10

, target, precision=precision)

這個片段沒什麼好講解的,就是進製轉換的操作變成**。看到這裡我只能佩服原作者是真的優秀,要我來寫估計要抓狂到禿頭了。

因為作業題目較多,就設定了乙個迴圈,也就簡單一些。

dec =

1while dec ==1:

number =

input

("請輸入數字"

) m =

eval

(input

("請輸入原進製"))

n =eval

(input

('請輸入輸出進製'))

print

(basechange(number, m, n)

) dec =

eval

(input

("是否繼續(0/1)"

))

要求就是能迴圈就行了,所以就是0,1快速進行。

計算機基礎 進製轉換

0111 0101 2 6 2 5 2 4 2 2 2 0 64 32 16 4 1 1171.把十進位制數字拆分成多個2的整數次方之和,把每個拆分結果單獨轉換成二進位制,最後把所有轉換結果合併。85 64 16 4 1 2 6 2 4 2 2 2 0 0100 0000 0001 0000 000...

計算機進製轉換

一 計算機只認識0和1,二進位制。二 2進製轉換成 8進製 和 16進製制,如下圖 二進位制 八進位制 研究上圖發現,3位最高二進位制可以用來表示一位八進位制。所以,將二進位制分解每3位,不夠前面補0,然後每3位轉換為10進製,順序排列即可。二進位制 十六進製制 4位最高二進位制可以用來表示一位十六...

計算機基礎 進製間的轉換

這個進製轉換一直記不住,學會了過段時間就又忘了,今天趁著有空,再學一下 不是 就是原理 十二進位制是計算機所用的語言,就只有 0 和 1 八進位制是從 0 到 7 進製就是我們平時所用到的數從 0 到 10,十六進製制就和它們三個不一樣了,0 到 9沒變,但之後用a 表示 10,b 表示 11 c ...