使用Ord和Chr的Python Caesar密码

使用Ord和Chr的Python Caesar密码,python,loops,Python,Loops,我想我已经学会了足够多的python来制作凯撒密码,所以我开始制作它,我遇到了麻烦 这是我的密码: phrase = raw_input("Enter text to Cipher: ") shift = int(raw_input("Please enter shift: ")) result = ("Encrypted text is: ") for character in phrase: x = ord(character) x = x + shift print

我想我已经学会了足够多的python来制作凯撒密码,所以我开始制作它,我遇到了麻烦

这是我的密码:

phrase = raw_input("Enter text to Cipher: ")
shift = int(raw_input("Please enter shift: "))
result = ("Encrypted text is: ")

for character in phrase:
    x = ord(character)

    x = x + shift


print chr(x)
此时,如果短语为“hi”,shift为1,则for循环仅围绕字母i循环,而不是字母h循环,因此我的结果是:j

我想循环整个单词,并将每个字母移位,移位int变量是什么


如何循环短语变量?

将每个加密字符附加到
结果
字符串中

phrase = raw_input("Enter text to Cipher: ")
shift = int(raw_input("Please enter shift: "))
result = ""

for character in phrase:
    x = ord(character)
    result += chr(x + shift)

print result

您的代码正在打印
ord()
'j'
,因为循环结束时字符等于
'i'
。您应该将新字符存储到一个列表中,循环结束后,您应该加入它们,然后打印

new_strs = []
for character in phrase:
    x = ord(character)
    x = x + shift
    new_strs.append(chr(x))   #store the new shifted character to the list
    #use this if you want z to shift to 'a'
    #new_strs.append(chr(x if 97 <= x <= 122 else 96 + x % 122))
print "".join(new_strs)       #print the new string
尝试:


如果它只输出一个字符,而这是预期的最后一个字符,那么当执行
print
语句时,这会告诉您什么?抱歉,不是100%确定。我试着把打印放在循环中,结果是:I,j在不同的行上。看起来循环正常,但我打印信息的方式有问题。你也应该想想
az
会发生什么,比如Hi Jon,是的,我本来想看看的。我必须做一个if语句,这样它将返回到32(空格)append实际上是连接移位字符,对吗?@BubbleMonster yes,
list.append将项目追加到列表末尾。
$ python so.py
Enter text to Cipher: hi
Please enter shift: 1
ij
phrase = raw_input("Enter text to Cipher: ")
shift = int(raw_input("Please enter shift: "))
result = ("Encrypted text is: ")
import sys
for character in phrase:
  x = ord(character)
  x = x + shift
  sys.stdout.write(chr(x))
  sys.stdout.flush()