按某个步骤移动字符串的所有字母

Hir*_*ora 0 python string indexing loops python-3.x

  • 输入:['baNaNa', 7] #字符串和步长
  • 所需的输出:'utGtGt'# 字符串的每个字符按步长向后移动
import ast  
in_string = input()  
lis = ast.literal_eval(in_string)  
st = lis[0]  
step = lis[1]  
alphabets = 'abcdefghijklmnopqrstuvwxyz'  
password = ''  
for letter in st:  
    if letter in alphabets:  
        index_val = alphabets.index(letter) - (step)  
        password += alphabets[index_val]  

print(password)
Run Code Online (Sandbox Code Playgroud)

我得到的输出是“utgtgt”。我想要'utGtGt'。对此的帮助将不胜感激。

Pat*_*ner 7

string 模块具有创建转换字典方法翻译方法来执行您想要的操作:

st = "baNaNa"
step = 7
alphabets = 'abcdefghijklmnopqrstuvwxyz'
alph2 = alphabets.upper() 

# lower case translation table
t = str.maketrans(alphabets, alphabets[-step:]+alphabets[:-step])

# upper case translation table
t2 = str.maketrans(alph2, alph2[-step:]+alph2[:-step])

# merge both translation tables
t.update(t2)

print(st.translate(t)) 
Run Code Online (Sandbox Code Playgroud)

输出:

utGtGt
Run Code Online (Sandbox Code Playgroud)

你给它原始字符串和一个等长的字符串来映射字母并使用str.translate(dictionary).

切片后的字符串相当于:

print(alphabets)
print(alphabets[-step:]+alphabets[:-step])

abcdefghijklmnopqrstuvwxyz
tuvwxyzabcdefghijklmnopqrs
Run Code Online (Sandbox Code Playgroud)

这就是你的step目的。


如果您从未见过使用字符串切片,请参阅了解切片表示法