Python 3.4.3 中的凯撒密码
Caesar Cipher in Python 3.4.3
如果我输入"eat",我应该得到的输出应该是"hdw",如果我将它移动3。但是,最终结果只是"w"。我很确定我拥有我需要的一切,但也许是格式问题?
def shifter():
phrase = input("Please enter a message: ")
key = eval(input("Please enter the number of places to be shifted: "))
list = phrase.split()
for word in list:
for ch in word:
conversion = (chr)((ord(ch) - ord("a") + key) % 26 + ord("a"))
newPhrase = " "
newPhrase = newPhrase + conversion
print(newPhrase)
shifter()
我认为这是你的缩进!
现在,在对变量转换进行任何操作之前,您已经遍历了 word 中的每个 ch,因此您卡在了最后一个 ch。
尝试进行转换 += ... 而不是转换 = ...
(您可能需要在此之前初始化转换,但 idts。)
问题在于您是在 for 循环内设置转换,而不是附加到它,因此最后只有单词中的最后一个字符附加到 newPhrase。
您应该附加到转换,而不是设置它。
此外,您应该在循环外初始化 newPhrase
,然后在循环内附加到它。
例子-
def shifter():
phrase = input("Please enter a message: ")
key = eval(input("Please enter the number of places to be shifted: "))
list = phrase.split()
newPhrase = ""
for word in list:
conversion = ''
for ch in word:
conversion += (chr)((ord(ch) - ord("a") + key) % 26 + ord("a"))
newPhrase = newPhrase + conversion + " "
print(newPhrase)
shifter()
如果我输入"eat",我应该得到的输出应该是"hdw",如果我将它移动3。但是,最终结果只是"w"。我很确定我拥有我需要的一切,但也许是格式问题?
def shifter():
phrase = input("Please enter a message: ")
key = eval(input("Please enter the number of places to be shifted: "))
list = phrase.split()
for word in list:
for ch in word:
conversion = (chr)((ord(ch) - ord("a") + key) % 26 + ord("a"))
newPhrase = " "
newPhrase = newPhrase + conversion
print(newPhrase)
shifter()
我认为这是你的缩进! 现在,在对变量转换进行任何操作之前,您已经遍历了 word 中的每个 ch,因此您卡在了最后一个 ch。
尝试进行转换 += ... 而不是转换 = ... (您可能需要在此之前初始化转换,但 idts。)
问题在于您是在 for 循环内设置转换,而不是附加到它,因此最后只有单词中的最后一个字符附加到 newPhrase。
您应该附加到转换,而不是设置它。
此外,您应该在循环外初始化 newPhrase
,然后在循环内附加到它。
例子-
def shifter():
phrase = input("Please enter a message: ")
key = eval(input("Please enter the number of places to be shifted: "))
list = phrase.split()
newPhrase = ""
for word in list:
conversion = ''
for ch in word:
conversion += (chr)((ord(ch) - ord("a") + key) % 26 + ord("a"))
newPhrase = newPhrase + conversion + " "
print(newPhrase)
shifter()