为了账号安全,请及时绑定邮箱和手机立即绑定

在列表中移动字符

在列表中移动字符

守候你守候我 2022-06-28 16:37:18
我想用某个指定的位置移动字符 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条经验 获得超15个赞

您应该计算给定字符到 的序数的偏移量,将其'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


查看完整回答
反对 回复 2022-06-28
?
POPMUISE

TA贡献1765条经验 获得超5个赞

在@blhsing 答案的基础上,您可以通过列表理解将您的输出放在一行中。


"".join([chr((ord(ch) - ord('a') - n) % 26 + ord('a'))for ch in message])

>>> 'utgtgt'


查看完整回答
反对 回复 2022-06-28
?
倚天杖

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))


查看完整回答
反对 回复 2022-06-28
  • 3 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信