Python如何將給定字符串中的大寫英文字母按以下對應規(guī)則替換
問題描述
輸入樣例:
Only the 11 CAPItal LeTtERS are replaced
輸出樣例:
Only the 11 XZKItal OeGtVIH are replaced
解題思路
首先想到的是使用字典匹配字符然后遍歷替換,其次想到的是使用ASCLL碼,后者更為方便簡單。
思路一
inp = input() dist = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N' 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] for i in inp: if i in dist: index = dist.index(i) inp = inp.replace(i, dist[-index - 1]) print(inp)
思路二
str = input() for i in str: num = ord(i) # 得到ASCII碼 if (65 <= num <= 90): # 如果是大寫字母 str = str.replace(i, chr(155 - num)) print(str)
遇到的問題:
在思路二中,我之前的代碼是這樣的:
str = input() def replace(str): for i in str: num = ord(i) # 得到ASCII碼 if (num >= 65 & num <= 90): # 如果是大寫字母 i = chr(155 - num) return str replace(str) print(str)
后來意識到 i 只是一個變量,轉(zhuǎn)瞬即逝,我并沒有把它存住。
然后想到的用 replace()函數(shù):
str = input() for i in str: num = ord(i) # 得到ASCII碼 if (65 <= num <= 90): # 如果是大寫字母 str.replace(i, chr(155 - num)) print(str)
但是還是不對,因為我沒有存儲 replace()函數(shù)的返回值,導致雖然替換了,但是沒有存儲它,所以結果沒有變化。
最終的代碼就是上的那個了,看起來完美無缺,但是全部都是做的,為什么?
輸入:
Only the 11 CAPItal LeTtERS are replaced
輸出:
Only the 11 XZKItal OeGtVIH are replaced
可以看到除了第一個 O 之外其他的都對,那為什么 O 沒有換呢?
其實它換了,只是換了兩次,負負得正,又回來了。
因為 replace()方法會把字符串中所有符合條件的字母替換掉。
比如輸入 OL ,我們想要的結果為 LO,但上述代碼實際上輸出的是 OO;
第一次循環(huán)把 O 替換成了 L ,此時字符串為 LL;
第二次循環(huán),把所有的 L 都替換成了 O,所以輸出結果為 OO。
解決方案:
首先想到的是定義一個對象存儲當前的值和一個標記,替換之前先看它是否被訪問過了,如果被訪問過了就跳過。
還有一種方法就是拼接字符串,讓 replace 方法只作用于當前字符。
最終答案
str = input() newStr = '' for i in str: num = ord(i) # 得到ASCII碼 if (65 <= num <= 90): # 如果是大寫字母 i = i.replace(i, chr(155 - num)) newStr += i print(newStr)
還有更簡單的方法:
str = input() newStr = '' for i in str: if i.isupper(): newStr += chr(155 - ord(i)) else: newStr += i print(newStr)
python實現(xiàn)26個英文字母按規(guī)則輸出
import string n=eval(input()) s=string.ascii_uppercase for i in s: print(i,end='') if (s.find(i)+1)%n==0: print()
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持本站。
版權聲明:本站文章來源標注為YINGSOO的內(nèi)容版權均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。