首頁 > 軟體

Python如何將給定字串中的大寫英文字母按以下對應規則替換

2021-10-14 16:03:41

問題描述

輸入樣例:

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 只是一個變數,轉瞬即逝,我並沒有把它存住。

然後想到的用 replace()函數:

str = input()
for i in str:
    num = ord(i)  # 得到ASCII碼
    if (65 <= num <= 90):  # 如果是大寫字母
        str.replace(i, chr(155 - num))
print(str)

但是還是不對,因為我沒有儲存 replace()函數的返回值,導致雖然替換了,但是沒有儲存它,所以結果沒有變化。

最終的程式碼就是上的那個了,看起來完美無缺,但是全部都是做的,為什麼?

輸入:

Only the 11 CAPItal LeTtERS are replaced

輸出:

Only the 11 XZKItal OeGtVIH are replaced

可以看到除了第一個 O 之外其他的都對,那為什麼 O 沒有換呢?

其實它換了,只是換了兩次,負負得正,又回來了。

因為 replace()方法會把字串中所有符合條件的字母替換掉。

比如輸入 OL ,我們想要的結果為 LO,但上述程式碼實際上輸出的是 OO;

第一次迴圈把 O 替換成了 L ,此時字串為 LL;

第二次迴圈,把所有的 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實現26個英文字母按規則輸出

import string
n=eval(input())
s=string.ascii_uppercase
for i in s:
print(i,end='')
if (s.find(i)+1)%n==0:
print()

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com