rot13新品发布

2024-04-25 07:38:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图实现Rot-13函数,但我想还是坚持使用新行。你知道吗

这是我的密码:

import cgi, string
def convert():
    lower = string.ascii_lowercase
    upper = string.ascii_uppercase
    punctuation = string.punctuation + ' '      
    with open('data.txt', 'r') as myfile:
        s = myfile.read()
    s = '%(pre_b)s%(s)s%(pre_e)s' % {'pre_b': '<pre>', 's': s, 'pre_e': '</pre>'}
    s = ''.join(map(lambda x: shift(x, lower, upper, punctuation), s[5:-6]))
    return cgi.escape(s, quote= True)

def shift(x, lower, upper, punctuation):
    if x in punctuation:
        return x
    elif x.istitle():
        return upper[(upper.index(x) + 13) % 26]
    try:
        return lower[(lower.index(x) + 13) % 26]
    except:
        print x
print convert()

单行语句正在处理中,但当输入包含新行时,python会说TypeError: expected string, NoneType found

文件的内容数据.txt文件如下:

test

test test

请帮忙。你知道吗


Tags: testtxtconvertstringindexreturnshiftdef
1条回答
网友
1楼 · 发布于 2024-04-25 07:38:52

您的错误与换行有关,但不仅限于换行。基本上,对于punctuationlowerupper中的任何字符,shift()函数返回一些内容。其他的一切都在这里结束

except:
    print x

其中函数不返回任何内容,即值None。当你试图加入一个列表,其中一些元素不是字符串,你得到的错误。你知道吗

>>> ''.join(['a', 'b', None])

Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    ''.join(['a', 'b', None])
TypeError: sequence item 2: expected string, NoneType found

总之,您甚至需要为不在punctuationlowerupper集中的字符返回一些内容。返回x的伪代码:

if x in lower
    return something
elif x in upper
    return something else
else
    return x

以及用于返回''的伪代码。你知道吗

if x in lower
    return something
elif x in upper
    return something else
elif x in punctuation
    return x
else
    return ''

相关问题 更多 >