以下代码适用于我的一个传递主题的练习
这是我的代码:
rot13=raw_input("Please write your text! ")
这是我要求用户提供文字的地方
for i in range(len(rot13)):
在这部分中,我将逐字逐句检查文本。
if rot13[i]=="a":
rot13[i]="n"
elif rot13[i]=="b":
rot13[i]="o"
elif rot13[i]=="c":
rot13[i]="p"
elif rot13[i]=="d":
rot13[i]="q"
elif rot13[i]=="e":
rot13[i]="r"
elif rot13[i]=="f":
rot13[i]="s"
elif rot13[i]=="g":
rot13[i]="t"
elif rot13[i]=="h":
rot13[i]="u"
elif rot13[i]=="i":
rot13[i]="v"
elif rot13[i]=="j":
rot13[i]="w"
elif rot13[i]=="k":
rot13[i]="x"
elif rot13[i]=="l":
rot13[i]="y"
elif rot13[i]=="m":
rot13[i]="z"
elif rot13[i]=="n":
rot13[i]="a"
elif rot13[i]=="o":
rot13[i]="b"
elif rot13[i]=="p":
rot13[i]="c"
elif rot13[i]=="q":
rot13[i]="d"
elif rot13[i]=="r":
rot13[i]="e"
elif rot13[i]=="s":
rot13[i]="f"
elif rot13[i]=="t":
rot13[i]="g"
elif rot13[i]=="u":
rot13[i]="h"
elif rot13[i]=="v":
rot13[i]="i"
elif rot13[i]=="w":
rot13[i]="j"
elif rot13[i]=="x":
rot13[i]="k"
elif rot13[i]=="y":
rot13[i]="l"
elif rot13[i]=="z":
rot13[i]="m"
print rot13
有谁知道为什么这不起作用?我不想用编码来做。
答案 0 :(得分:0)
您的代码存在一些问题。
首先,您尝试将字符分配给字符串,但字符串是不可变的,因此您无法使用=
换出字符。其次,您不需要对每个字符及其映射进行硬编码。您应该使用modulus运算符(%
)。
基本解决方案是循环遍历每个字符,将其转换为数字,向其中添加13,然后将其转换为字符。您必须考虑您的输入是" z"并且由此产生的角色超出了字母表。那就是你必须使用模数运算符来强制角色环绕。
以下是一个例子:
def rot13(string):
result = []
for char in string:
shiftBy = 65 # uppercase 'A'
if char.islower():
shiftBy = 97 # lowercase 'a'
newChar = chr(((ord(char) + 13 - shiftBy) % 26) + shiftBy)
result.append(newChar)
return ''.join(result)
print rot13("abcXYZ")
ord
将字符转换为数字表示形式(例如'a'
变为97
)
chr
执行反向计算(例如97
变为'a'
)