Python 2.7.4,有谁知道为什么这不起作用



以下代码是让我的一个练习通过主题,

这是我的代码:

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

有谁知道为什么这不起作用?我不想用编码来做。

您的代码存在一些问题。

首先,您尝试为字符串分配字符,但字符串是不可变的,因此无法使用 = 替换字符。其次,您不需要对每个字符及其映射进行硬编码。您应该使用模运算符 ( % (。

基本解决方案是遍历每个字符,将其转换为数字,向其添加 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'(

相关内容

  • 没有找到相关文章

最新更新