如何在Python循环中为变量创建字母进程?

1 投票
5 回答
1362 浏览
提问于 2025-04-17 07:13

我正在尝试在一个循环中将一个变量(lett)改成字母表中的下一个字母。这个变量在脚本开始时需要设置为某个特定的字母(而这个初始字母会根据脚本的使用情况而变化)。我开始时写了以下这段代码:

初始脚本(当我还在学习的时候):

while lett_trig == 2:
    if set_lett == 2:
        lett = "a"
    if set_lett == 3:
        lett = "b"
    if set_lett == 4:
        lett = "c"
    if set_lett == 5:
        lett = "d"
    if set_lett == 6:
        lett = "e"
    if set_lett == 7:
        lett = "f"
    if set_lett == 8:
        lett = "g"
    if set_lett == 9:
        lett = "h"
#... and this goes on till it reaches if set_let == 27: lett = "z"

    set_lett += 1
    if set_lett == 28:
        set_lett = 2
    print lett

# set_lett starts at two because I left set_lett == 1 to create a space (" ")

当然,这只是一个更大脚本的简化版本。这是我能想到的唯一简化:

lett_trig = 2
x = 0

a = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]

while lett_trig == 2:
    lett = a[x]
    x += 1
    if x == 26:
        x = 0

有没有其他方法可以通过数学方式从一个字母变到另一个字母?比如通过某种二进制转换操作?还是说用列表的方式是最有效的?


回答:经过查看所有答案并测试它们的效率后,我发现使用字典函数是最快(也是最简洁)的。以下是代码示例:

import string

letter_map = dict(zip(string.ascii_lowercase, string.ascii_lowercase[1:] + string.ascii_lowercase[0]))
lett1 = "d"

while ord(lett2) < 122:
    print lett1
    lett1 = letter_map[lett1]

5 个回答

1

根据你正在做的事情,你可能会对 string.lowercase 以及它的相关内容感兴趣。

>>> import string
>>> for let in string.lowercase:
...    print let
...
a
b
c
(etc)

想了解更多细节,可以查看 这份文档

4

可以试试这样的代码:

chr(x + ord("a"))

这里的 x 是一个整数,范围在 0 到 25 之间。

ord() 这个函数可以返回一个字符对应的 ASCII 码,而 chr() 则可以把一个 ASCII 码转换回字符。在 ASCII 码中,小写字母是连续排列的(和 EBCDIC 不同,后者可能有些人还记得)。

8

可以使用 itertools.cycle

import itertools
import string
letters = itertools.cycle(string.lowercase)

这样一来,letters 就是一个无限的字母序列,会不断从 a 到 z 重复。你可以在 while 循环中通过调用 letters.next() 来使用它,或者在 for 循环中设置一个结束条件,比如用 itertools.islice

你可以把这些内容放到一个函数里:

def cyclic_letters(start='a'):
    i = string.lowercase.index(start)
    letts = string.lowercase[i:] + string.lowercase[:i]
    return itertools.cycle(letts)

cyclic_letters 函数还允许你选择序列中的初始字母,默认是 'a'

另外,你也可以用一个字典来表示给定字母的下一个字母。你可以这样创建一个字典:

letter_map = dict(zip(string.lowercase, string.lowercase[1:] + string.lowercase[0]))

这只是一个字典,所以使用例如 letter_map['c'] 会得到 'd'

在上面的例子中,string.lowercase 只是一个包含小写字母的字符串。这个值会根据你的地区设置而不同。如果你只想要 'abcdefghijklmnopqrstuvwxyz',不管地区如何,你可以用 string.ascii_lowercase 替代,或者直接给出这个字符串。

撰写回答