用python實現(xiàn)英文字母和相應(yīng)序數(shù)轉(zhuǎn)換
第一步:字母轉(zhuǎn)數(shù)字
英文字母轉(zhuǎn)對應(yīng)數(shù)字相對簡單,可以在命令行輸入一行需要轉(zhuǎn)換的英文字母,然后對每一個字母在整個字母表中匹配,并返回相應(yīng)的位數(shù),然后累加這些位數(shù)即可。過程中,為了使結(jié)果更有可讀性,輸出相鄰數(shù)字間怎加了空格,每個對應(yīng)原來單詞間增加逗號。
c
=
"abcdefghijklmnopqrstuvwxyz"
temp
=
''
list
=
[
]
s
=
input
(
)
num
=
len
(
s
)
list
.
append
(
s
)
for
i
in
range
(
0
,
num
)
:
if
list
[
0
]
[
i
]
==
' '
:
temp
+=
','
else
:
for
r
in
range
(
1
,
26
)
:
if
list
[
0
]
[
i
]
==
c
[
int
(
r
)
-
1
]
:
temp
+=
str
(
r
)
temp
+=
' '
print
(
"輸出結(jié)果為:%s"
%
temp
)
第二步:數(shù)字轉(zhuǎn)字母
數(shù)字轉(zhuǎn)字母有個難點就是,當(dāng)輸入一行數(shù)字,如何才能合理地把它們每個相應(yīng)位的數(shù)取出來。
- 才開始想到用正則匹配,定模式單元(\d+,{0,}),然后希望每個數(shù)字用.groups()形式返回一個元組(tuple),但限于要輸入數(shù)字的個數(shù)位置,沒找到好的匹配方式。
- 然后用到了split()函數(shù),用相應(yīng)的分隔符分割一段字符串之后,將值已list形式返回。
c
=
"abcdefghijklmnopqrstuvwxyz"
temp
=
''
s
=
input
(
)
s_list
=
s
.
split
(
","
)
num
=
len
(
s_list
)
for
i
in
range
(
0
,
num
)
:
if
s_list
[
i
]
==
' '
:
temp
+=
' '
else
:
result
=
c
[
int
(
s_list
[
i
]
)
-
1
]
temp
+=
result
print
(
"輸出結(jié)果是:%s"
%
temp
)
完整代碼
#-*- coding: utf-8 -*-
import
re
def
main
(
)
:
ss
=
input
(
"請選擇
:
\n1
.
字母
-
>
數(shù)字\
\n2
.
數(shù)字
-
>
字母\n"
)
if
ss
==
'1'
:
print
(
"請輸入字母: "
)
fun1
(
)
elif
ss
==
'2'
:
print
(
"請輸入數(shù)字:"
)
fun2
(
)
def
fun1
(
)
:
c
=
"abcdefghijklmnopqrstuvwxyz"
temp
=
''
list
=
[
]
s
=
input
(
)
num
=
len
(
s
)
list
.
append
(
s
)
for
i
in
range
(
0
,
num
)
:
if
list
[
0
]
[
i
]
==
' '
:
temp
+=
','
else
:
for
r
in
range
(
1
,
26
)
:
if
list
[
0
]
[
i
]
==
c
[
int
(
r
)
-
1
]
:
temp
+=
str
(
r
)
temp
+=
' '
print
(
"輸出結(jié)果為:%s"
%
temp
)
def
fun2
(
)
:
c
=
"abcdefghijklmnopqrstuvwxyz"
temp
=
''
s
=
input
(
)
s_list
=
s
.
split
(
","
)
num
=
len
(
s_list
)
for
i
in
range
(
0
,
num
)
:
if
s_list
[
i
]
==
' '
:
temp
+=
' '
else
:
result
=
c
[
int
(
s_list
[
i
]
)
-
1
]
temp
+=
result
print
(
"輸出結(jié)果是:%s"
%
temp
)
if
__name__
==
'__main__'
:
main
(
)
便可利用該python代碼實現(xiàn)英文字母和對應(yīng)數(shù)字的相互轉(zhuǎn)換。
**附加
1.其他方法
除了以上這種方法,還可以借助ascii碼連續(xù)性來轉(zhuǎn)換字母和相應(yīng)的序數(shù)。
字母轉(zhuǎn)數(shù)字
s
=
input
(
"請輸入字母"
)
temp
=
''
for
i
in
range
(
0
,
len
(
s
)
)
:
if
s
[
i
]
==
' '
:
temp
+=
','
else
:
m
=
ord
(
s
[
i
]
)
-
96
temp
+=
str
(
m
)
temp
+=
" "
print
(
"輸出結(jié)果為:%s\n"
%
temp
)
數(shù)字轉(zhuǎn)字母
s
=
input
(
"請輸入數(shù)字:"
)
s_list
=
s
.
split
(
','
)
temp
=
''
for
i
in
range
(
0
,
len
(
s_list
)
)
:
if
s_list
[
i
]
==
' '
:
temp
+=
' '
else
:
m
=
chr
(
int
(
s_list
[
i
]
)
+
96
)
temp
+=
m
print
(
"輸出結(jié)果為:%s"
%
temp
)
2.其他啟發(fā)
用ASCII碼來實現(xiàn)字母和數(shù)字轉(zhuǎn)換是一個很好的途徑,因為她們都有連續(xù)的特性,加減之后會得到對應(yīng)的值。
- 例如:實現(xiàn)16進制數(shù)轉(zhuǎn)10進制
s
=
input
(
"請輸入16進制數(shù)[格式為0xaaa]:\n"
)
s
=
s
[
2
:
]
result
=
0
num
=
n
=
len
(
s
)
for
i
in
range
(
0
,
n
)
:
try
:
if
(
int
(
s
[
num
-
1
]
)
in
range
(
0
,
9
)
)
:
result
+=
int
(
s
[
num
-
1
]
)
*
pow
(
16
,
n
-
num
)
num
-=
1
except
:
if
(
ord
(
s
[
num
-
1
]
)
in
range
(
97
,
101
)
)
:
result
+=
(
ord
(
s
[
num
-
1
]
)
-
87
)
*
pow
(
16
,
n
-
num
)
num
-=
1
elif
(
ord
(
s
[
num
-
1
]
)
in
range
(
65
,
69
)
)
:
result
+=
(
ord
(
s
[
num
-
1
]
)
-
55
)
*
pow
(
16
,
n
-
num
)
num
-=
1
print
(
result
)
當(dāng)然,python提供了轉(zhuǎn)十進制和十六進制之間的函數(shù):
hex
(
10
)
#10進制轉(zhuǎn)16進制 結(jié)果為:a
int
(
'a'
,
16
)
或
int
(
'0xa'
,
16
)
#16進制轉(zhuǎn)10進制 結(jié)果為:10
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
