作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设以下场景:
import string
UPPERCASE_ALPHABET = list(string.ascii_uppercase)
LOWERCASE_ALPHABET = list(string.ascii_lowercase)
如何在字母表上创建一个跳跃 N 个位置的循环?
<小时/>示例 1:
字母 = a,跳转 = 5
结果:f
<小时/>示例 2:
字母 = z,跳跃 = 5
结果:e
<小时/>到目前为止,我得到了:
import string
UPPERCASE_ALPHABET = list(string.ascii_uppercase)
LOWERCASE_ALPHABET = list(string.ascii_lowercase)
def forward(letter, jump):
alphabet = LOWERCASE_ALPHABET if letter.islower() else UPPERCASE_ALPHABET
index = alphabet.index(letter)
count = 0
while True:
if count == jump:
return alphabet[index]
if index == len(alphabet):
index = 0
index += 1
count += 1
print forward('a', 5)
print forward('z', 5)
但它看起来一点也不 Pythonic...
有没有更好的 Python 方式来做到这一点?也许使用 chr(ord('N') +position) ?
最佳答案
我认为您对 ord
和 chr
的想法是正确的:
import string
def forward(letter, jump):
if letter.islower():
start_character = ord('a')
else:
start_character = ord('A')
start = ord(letter) - start_character
offset = ((start + jump) % 26) + start_character
result = chr(offset)
return result
print forward('a', 5)
print forward('z', 5)
print forward('z', 1)
print forward('a', 26)
print forward('A', 5)
print forward('Z', 5)
print forward('Z', 1)
print forward('A', 26)
输出
f
e
a
a
F
E
A
A
关于python - 如何在 Python 中创建字母表上的循环迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47759611/
我是一名优秀的程序员,十分优秀!