今天在做一个函数的作业,题目如下:
编写一个函数实现大写转小写,小写变大写,并且转换为镜像字符串,并且将字符串变为镜像字符串。 例如:’A’变为’Z’,’b’变为’y 示范字符串: ”sdSdsfdAdsdsdfsfdsdASDSDFDSFa”字符串大写变小写 小写变大写。
总结起来就是输入一个字符串,将其中每个元素做大小写变换和转换,然后按照顺序重新输出。
一开始我的思路是分别建一个26字母大写、小写的字符串,通过轮询你输入的字符串,如果元素是大写:则变成小写,并依据我创建的字母字符串索引做镜像转换。小写思路参照大写。
问题在于输出到新的字符串当中,我也想到了是定义一个空字符串,然后拼接的方式来完成输入的整个字符串转换,但是最后卡在了怎么获取处理后的元素。
最后参照了老师的代码才发现原因还是自己对于for循环理解不够深入,for循环中用变量去轮询字符串,忘记了变量也可以重新赋值。
最后完善了自己的代码如下:
1 l_upper=[chr(i) for i in range(65,91)] 2 l_lower=[chr(i) for i in range(97,123)] 3 4 def mirror_image(l): #定义函数 5 print(l) #输出输入字符串 6 l1='' #定义空字符串,用于转换后存储 7 for i in l: #轮询字符串,i本身也是变量!!!! 8 if i in l_lower: 9 i=i.upper() #小写转大写 10 index_i=l_upper.index(i) #获取索引 11 i=l_upper[25-index_i] #镜像转换 12 l1+=i 13 else: 14 i=i.lower() #大写转小写 15 index_i = l_lower.index(i) 16 i = l_lower[25 - index_i] 17 l1+=i 18 print(l1) 19 20 21 22 mirror_image('aBxdeF')
再附上老师的两套代码:
1 #方法一:根据Ascii编码解题 2 def change_string(s): 3 new_s='' 4 for item in s: 5 if item.islower(): 6 num=ord(item)-32#转变为大写 7 num=155-num#大写字母互为镜像文字的数值之和为155 8 new_s+=chr(num) 9 else: 10 num=ord(item)+32#转为小写 11 num=219-num#大写字母互为镜像文字的数值之和为219 12 new_s+=chr(num) 13 return new_s 14 15 #方法二:利用字符串的内置方法来解决 16 def change_str_2(s): 17 s=s.swapcase()#互换大小写 18 19 in_tab='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 20 out_tab='ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba' 21 reflect=str.maketrans(in_tab,out_tab)#建立翻译表 22 23 s=s.translate(reflect)#根据翻译表进行翻译 24 return s 25 26 27 if __name__ == '__main__': 28 s='sdSdsfdAdsdsdfsfdsdASDSDFDSFa' 29 new_s=change_string(s) 30 # new_s=change_str_2(s) 31 print("转换之前的字符串:",s) 32 print("转换之后的字符串:",new_s)