Python 2.7 Python2.7.4,有人知道这为什么不起作用吗?

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"

以下代码是我通过该科目的一项练习的代码

这是我的代码:

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"
 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。