我试图在循环的每次迭代中将变量(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 (" ")
这当然是一个更大的脚本的简化。 这是我唯一能想到的简化方法:
^{pr2}$有没有其他方法可以从一个字母转换成另一个字母?通过一些二进制转换操作?还是列表方式最有效?在
答:在浏览了所有的答案并测试了它们的效率之后,我发现dict函数是最快的(也是最干净的)。代码示例:
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]
使用
itertools.cycle
:因此,
letters
是一个无限的字母序列,从a到z重复运行。您可以通过调用letters.next()
在while
循环中使用它,或者在for
循环中以某种方式施加终止条件,例如itertools.islice
。在您可以将其组合成一个函数:
^{pr2}$cyclic_letters
函数还允许选择序列中的初始字母,默认为'a'
。在或者,您可以使用字典显示任何给定字母的下一个字母。您可以为此创建字典,例如:
这只是一个字典,所以使用}。在
letter_map['c']
将产生{在上面,
string.lowercase
只是一个包含小写字母的字符串。该值将取决于您的区域设置。如果您只想要'abcdefghijklmnopqrstuvwxyz'
,而不考虑区域设置,则可以用string.ascii_lowercase
代替,或者只给出显式字符串。在尝试一下
其中
x
是0到25范围内的整数。在^{} 返回字符的ASCII代码,^{} 将ASCII代码再次转换为字符。在ASCII中,小写字母都是连续出现的(与EBCDIC相反,对于那些仍然记得的人)。在
见ord,chr
相关问题 更多 >
编程相关推荐