Python字符映射函数返回字符串无输出问题排查求助
问题分析与解决
你的问题出在拼接字符串时没有将映射后的数字转换为可见的大写字母。
看代码里的拼接逻辑:
message += chr(d[ord(s)-65])
d[ord(s)-65]返回的是0-25之间的整数,直接用chr()转换会得到ASCII控制字符(比如chr(0)是空字符、chr(1)是标题开始符等),这类字符在终端中完全不可见,所以你打印返回值时看不到内容,但字符串本身并非空值(初始包含一个空格,加上这些不可见字符)。
而你调试用的print语句能正常输出,是因为你给数字加了65:
print(chr(d[ord(s)-65] +65 ), " was mapped to", s)
这一步才把0-25的数字转换成了A-Z的可见大写字母。
修复方法
将拼接时的chr()调用加上65,把数字映射为可见的大写字母:
message += chr(d[ord(s)-65] + 65)
另外,如果你不需要返回字符串开头多一个空格,可以把message = " "改成message = ""。
修复后的完整代码:
def f(a, b, text): d = {} for i in range(26): d[ (a*i + b) % 26] = i print(d) message = "" for s in text: mapped_char = chr(d[ord(s)-65] + 65) message += mapped_char print(mapped_char, " was mapped to", s) return message m = f(20, 7, "LFJFJGHG") print(m)
运行后print(m)就能正常输出可见的映射结果了。
内容的提问来源于stack exchange,提问作者tonythestark
相关产品推荐
相关产品推荐

