今天在做一個函數的作業,題目如下:
編寫一個函數實現大寫轉小寫,小寫變大寫,並且轉換為鏡像字符串,並且將字符串變為鏡像字符串。 例如:’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)
