[英]Char shift to left side using python
我是python的新手。 我想按其位置移動char。 例如
pos = 3然后用z替換c,用y替換b,用x替換a,像用C替換C一樣,用Y替換B並用X替換A
我嘗試了什么? 我嘗試過使用硬編碼的值,
for i in s:
if ord(i) == 99:
return z
if ord(i) == 98:
return x
...
...
是否有任何內置函數可以執行此操作? 或任何其他更簡單的方法來實現這一目標?
編輯:
如果字符串為"abcdef"
則輸出為"xyzabc"
我用戶輸入"AbCdEf"
然后輸出為"XyZaBc"
您可以將ord
與chr
結合使用:
ord("e") + 3
-> 104
chr(ord("e") + 3)
-> 'h'
根據您的要求,我了解您需要演示替換密碼 。 實施起來非常簡單。 我將為您提供功能概述偽代碼:
char substitutionCipher(int leftRotateBy, char alphabet) {
int pos = (int) alphabet - (int) 'a';
pos -= leftRotateBy;
if(pos < 0) {
pos += 26;
}
return (char) (pos + (int) 'a');
}
請注意,此輪廓僅適用於小寫字母。 您可以修改它以使其也適用於大寫字母。 謝謝!
如果您使用的是Python 2,並且想要轉換整個句子,請考慮制作一個字符轉換表。 https://docs.python.org/2/library/string.html#string.maketrans
import string
def caesar_shift(secret, shift):
lcase = string.ascii_lowercase
ucase = string.ascii_uppercase
shift = shift % len(lcase) # force shift to be between 0 and 25, inclusive
trans = string.maketrans(
''.join([lcase,ucase]),
''.join([lcase[shift:], lcase[shift:],
ucase[shift:], ucase[:shift]]))
return string.translate(secret, trans)
請記住,作為改進Python的Unicode字符串處理的一部分,Python 3中已棄用了string.maketrans和string.translate。
使用負值或正值向左/向右移動。 https://zh.wikipedia.org/wiki/凱撒密碼
import string
def convert(c, pos):
charset = string.lowercase
index = charset.find(c)
if index >= 0:
return charset[(index - pos) % len(charset)]
charset = string.uppercase
index = charset.find(c)
if index >= 0:
return charset[(index - pos) % len(charset)]
return c
assert convert("c", 3) == "z"
assert convert("b", 3) == "y"
assert convert("a", 3) == "x"
assert convert("C", 3) == "Z"
assert convert("B", 3) == "Y"
assert convert("A", 3) == "X"
對於那些對更好的性能感興趣的人的更新:
import string
def get_converter(pos):
def rot(s, pos):
offset = -pos % len(s)
return s[offset:] + s[:offset]
def getzip(charset, pos):
return zip(charset, rot(charset, pos))
def getdict(pos):
return dict(getzip(string.ascii_lowercase, pos) + getzip(string.ascii_uppercase, pos))
chardict = getdict(pos)
def converter(c):
return chardict.get(c, c)
return converter
convert = get_converter(3)
assert convert("c") == "z"
assert convert("b") == "y"
assert convert("a") == "x"
assert convert("C") == "Z"
assert convert("B") == "Y"
assert convert("A") == "X"
assert convert("!") == "!"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.