我想用某個指定的位置移動字符 Ex :Input = ['banana', 7]這里 7 是移動位置的步驟。Output = utgtgt. 它應該適用于任何用戶輸入。用戶輸入可以是小寫和大寫。數值是需要移動的位置數代碼:input_list = ['banana', 7]message=input_list[0]n=input_list[1]list1=[]for i in message: ch = i x = chr(ord(ch)-n) list1.append(x)print("".join(list1))
3 回答

侃侃爾雅
TA貢獻1801條經驗 獲得超16個贊
您應該計算給定字符到 的序數的偏移量,將其'a'
移動n
,得到它的模 26,然后通過添加 back 的序數來獲得移動字符的序數'a'
:
改變:
x = chr(ord(ch)-n)
至:
x = chr((ord(ch) - ord('a') - n) % 26 + ord('a'))
要同時處理大寫字母,您可以先有條件地設置基本字符:
base = ord('a' if ch.islower() else 'A') x = chr((ord(ch) - base - n) % 26 + base)
演示:https ://repl.it/@blhsing/ClosedElectricEquation

POPMUISE
TA貢獻1765條經驗 獲得超5個贊
在@blhsing 答案的基礎上,您可以通過列表理解將您的輸出放在一行中。
"".join([chr((ord(ch) - ord('a') - n) % 26 + ord('a'))for ch in message])
>>> 'utgtgt'

倚天杖
TA貢獻1828條經驗 獲得超3個贊
小寫字母僅占用代碼點 97 到 122。如果ord(ch) - n小于 97,則必須環繞。
for ch in message:
new = ord(ch) - n
if new < ord('a'):
new += 26
list1.append(chr(new))
添加回答
舉報
0/150
提交
取消