我正在try 编写一个函数,该函数接受一个字符串,然后将所有字符加2. 问题是,当我试图打印结果时,输出是不存在的.

这就是代码:

def plustwo(text):
    text = list(text)
    numbers = map(ord, text)
    for a in numbers:
        a += 2
    letters = map(chr, numbers)
    return letters

data = open("dati.txt")
readed = data.read()
sentence = plustwo(readed)

for letter in sentence:
    print(sentence)

而且没有任何输出.

推荐答案

正如Thierry提到的他的第一个注释,您只是在函数中递增一个局部变量:a不是对列表中单个字符的引用,而是一个新变量.(事实上,Python3中的map是迭代器,而不是列表.)

def shift_n(text, shift=2):
    current_numbers = map(ord, text)
    new_numbers = [number+shift for number in current_numbers]
    new_letters = map(chr, new_numbers)
    return ''.join(new_letters)

或者说有点浓缩:

def shift_n(text, shift=2):
    numbers = (number+shift for number in map(ord, text))
    return ''.join(map(chr, numbers))

Python相关问答推荐

大Pandas 胚胎中产生组合

滚动和,句号来自Pandas列

非常奇怪:tzLocal.get_Localzone()基于python3别名的不同输出?

如何在Windows上用Python提取名称中带有逗号的文件?

如何从具有不同len的列表字典中创建摘要表?

如何访问所有文件,例如环境变量

如果值不存在,列表理解返回列表

log 1 p numpy的意外行为

删除字符串中第一次出现单词后的所有内容

如何保持服务器发送的事件连接活动?

如何从需要点击/切换的网页中提取表格?

从Windows Python脚本在WSL上运行Linux应用程序

(Python/Pandas)基于列中非缺失值的子集DataFrame

Python—为什么我的代码返回一个TypeError

根据Pandas中带条件的两个列的值创建新列

用fft计算指数复和代替求和来模拟衍射?

PYTHON中的pd.wide_to_long比较慢

时间戳上的SOAP头签名无效

将时间序列附加到数据帧

将参数从另一个python脚本中传递给main(argv