# encoding=utf8
def ascii2number(text):
"""
ascii 转成数字字符串
:param text: str,且必须为A-Za-z组合
:return:
"""
text = text.strip() # 这里是将输入文本去除文本两边的回车和空格,比如" abDCe\n", 经过这步后就是"abDCe"
if not text: # 如果文本为空,则返回
return
result = [] # 定义结果的暂存list
# 循环text中的每一个字符,比如text="abDCe" 则i 将依次等于a,b,D,C,e
# 首先要明确text代表的是迭代器对象,还有一个很像的叫生成器对象,这个先不讲
# 迭代器对象是实现了__iter__方法的对象,这种对象可以用作for 循环的参数 即for i in []是可以的。
for i in text:
n = ord(i) # 将字母转换为int值
# 判断如果i是 A-Za-z里面的元素,则放入result,不是则报错
# 这里要介绍函数ord,即将ascii转换成int数字
if ord('A') <= n <= ord('z'):
result.append(n)
else:
raise ValueError('can noly change A-Za-z')
# 这一步很关键,这里有2种用法,
# 第一种map(str, result),用到map(方法A,list),作用就是map会将list中每个元素一次过方法A,并形成list输出,即map(A, [1,2,3])等价于 [A(1), A(2), A(3)]
# 第二种是字符串的拼接,join()方法,该方法会将一个list中的每个元素中间加上前面的字符串,比如a=["1","2","3"];','.join(a); 结果等于"1,2,3"
return ''.join(map(str, result))
def number2ascii(text):
"""
将数字字符串转为ascii字符串
:param text: 65-122 内数字组成的字符串
:return:
"""
text = text.strip() # 同上
# 这里多了一个text.isalnum(),这个方法是字符串的基本方法,方法返回True or False, 当text全为数字,返回True,否则返回False
if not text or not text.isalnum():
return
result = [] # 同上
list()
text_len = len(text) # 获取文本长度
i = 0 # 初始化首指针位置,这里i记录的是访问到text的第几位
while i < text_len: # 一个循环
start = int(text[i]) # 取出text的第i位,并转化为int值
if start == 1: # 如果当前转换的这个数字的第一位是1,则代表可能是1** 类字母
# 1**类字母取3个数 这里用到list的切片取法,切片是实现了__getslice__方法,意思是取第i位到第i+3的前一位
temp = int(text[i: i+3])
i += 3 # 改变首位指针
else: # 如果当前转换的这个数字的第一位不是1,则代表是**类字母
temp = int(text[i: i+2]) # 同上
i += 2 # 同上
if ord('A') <= temp <= ord('z'): # 同上
result.append(chr(temp)) # 介绍函数chr,将int数字转换成ascii
else:
raise ValueError('can noly change 65-122')
# 同上
return ''.join(map(str, result))
if __name__ == '__main__':
# print number2ascii(ascii2number('askdfaKDKSLDFJAK'))
number = input('输入数字你将得到字母')
print(number2ascii(str(number)))
word = input('输入字母你将得到数字')
print(ascii2number(str(word)))