这是我第一次问问题,因为我是个编程新手。
我在努力解决Codewar的问题,
"ROT13是一个简单的字母替换密码,它用字母13个字母代替字母,ROT13是凯撒密码的一个例子。“ 创建一个函数,该函数接受一个字符串并返回使用Rot13加密的字符串。如果字符串中包含数字或特殊字符,则应按原样返回它们。只有拉丁字母/英文字母表中的字母应该被移除,就像在最初的Rot13“实现”中一样。
我试着用我最好的能力来编码它,结果是这样的。
def rot13(message):
v = []
for i in message:
if i.isupper()== True:
d = ord(i) + 13
e = chr(d)
if d > 90:
u = (d - 91)
o = chr(u+65)
v.append(o)
else:
v.append(e)
elif i.islower() == True:
x = (ord(i)+13)
y = chr(x)
if x > 122:
z = (x - 123)
p = chr(z+97)
v.append(p)
else:
v.append(y)
else:
v.append(i)
print(''.join(v))它看起来起了作用,但它说它不正确。哪里出了问题?我知道这很难看,但是很好。提前谢谢你。
发布于 2021-05-28 10:06:04
如果我没弄错的话,你指的是https://www.codewars.com/kata/530e15517bc88ac656000716。注意测试用例的作用:
test.assert_equals(rot13("test"),"grfg")
test.assert_equals(rot13("Test"),"Grfg")他们不想让你打印结果,他们想让你把结果还回去。这与任务相匹配,也就是说
创建一个接受字符串的函数,返回使用Rot13加密的字符串
如果您只需将最后一行更改为
print(''.join(v))至
return ''.join(v)它通过了测试。
还有一些关于打印和返回之间的区别的其他问题,例如这一个
编辑:请注意,到目前为止,您的算法是正确的,但前提是您的输入只包括ascii字符。对于非ascii字符,您可能不想旋转它们,但是用python可以将它们识别为小写或大写。一个例子是德国的货币“a”、“u”和"ü“。对于这些情况,Matthias和Jon提供了一些想法(这也允许更优雅的实现)。此外,您还可以查看关于Codewar的其他意见,看看其他人是如何做到的。
https://stackoverflow.com/questions/67736663
复制相似问题