Python 2.7 Python2.7.4,有人知道这为什么不起作用吗?
以下代码是我通过该科目的一项练习的代码 这是我的代码: rot13=原始输入请写下您的文字 这是我向用户请求文本的地方 对于rangelenrot13中的我: 在这一部分中,我将逐字检查文本Python 2.7 Python2.7.4,有人知道这为什么不起作用吗?,python-2.7,if-statement,rot13,Python 2.7,If Statement,Rot13,以下代码是我通过该科目的一项练习的代码 这是我的代码: rot13=原始输入请写下您的文字 这是我向用户请求文本的地方 对于rangelenrot13中的我: 在这一部分中,我将逐字检查文本 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"
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"
打印rot13
有人知道为什么这不起作用吗?我不想使用encode进行编码。您的代码有几个问题 首先,您试图将一个字符分配给一个字符串,但字符串是不可变的,所以不能使用=。其次,您不需要硬编码每个字符及其映射。您应该使用运算符% 基本解决方案是循环遍历每个字符,将其转换为一个数字,再加上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”欢迎使用StackOverflow!你想要实现什么?预期输出和观察输出分别是什么?请通读并相应地编辑您的问题。一开始,我就看到您试图通过执行rot13[I]=。。。。在Python中不能这样做。首先考虑使用ListRo13将字符串转换成数组。但首先,你们想达到什么目的呢?我想让用户输入一个文本,然后用13个字符打印出来。实际上,当我用listrot13制作rot13列表时,我做了:keimeno=,因为我在lenrot13:,keimeno=keimeno+rot13[I],打印keimeno。所以它会像文本一样打印,而不是像列表一样。为什么不迭代这些字母并构建一个新的字符串变量呢?另外,尝试使用从键字母到其值log1的映射,因为您知道字典的大小。您可以将字符串作为字符列表进行迭代,对于rot13中的字符:我不会为您编写此代码,这是您的任务,请尝试以最大性能编写尽可能简单的代码。从键到值的映射和构建网络字符串可以在logn中实现,并且可以在一行、两行中实现,使其更具可读性,不使用字典构造器。或者使用string.maketrans生成映射表,并使用str的translate方法在Py3上以最有效的方式作为一行完成任何给定的转换,生成表的将是str.maketrans。