首页 > 解决方案 > Python 密码和嵌套循环

问题描述

我对 python 很陌生,但遇到了密码问题。我需要显示与两个输入语句相关的 3 列。用户输入是“消息”和“键文本”。第一列只是一次吐出一个字母的“消息”。第二列显示“keytext”输入的数值。第三列显示通过将 'message' 中的字母移动到 'keytext' 指示的相应值而创建的新文本(抱歉,这有点难以描述)

Message? HELLO
Keytext? AAAA
H 0 H
E 0 E
L 0 L
L 0 L
O 0 O

Message? HELLO
Keytext? ABBCD
H 0 H
E 1 F
L 1 M
L 2 N
O 3 R

现在我知道如何做一个简单的密码,但它让所有三列同时显示和合作,我只是无法弄清楚,似乎无法在任何地方找到答案。(或者可能我只是不知道该问什么正确的事情)

这是我目前的代码,在这个变体中,我似乎无法让中间列正确迭代。

keytext = str(input("Keytext? ").upper())
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

for i in message:
    place = alphabet.find(i)
    for j in keytext:
        place2 = alphabet.find(j)
        newplace = (place + place2)% 26
        code = alphabet[newplace]
    print(i,place2,code)

如果 message = hello 和 keytext = abcde,那么预期的输出将是

H 0 H
E 1 F
L 2 N
L 3 O
O 4 S

但是目前是:

H 4 L
E 4 I
L 4 P
L 4 P
O 4 S

所以它只是弄清楚如何将第 2 列正确地放入循环中......有没有人对我如何解决这个问题有任何建议?任何帮助都会非常感激。

谢谢!

标签: python-3.xnested-loops

解决方案


你确实想出了如何去做——除了一点点偏差。在内部for循环中,j遍历 thekeytextcode覆盖 the 。因此与预期输出的偏差。您所要做的就是移除内for循环。

message = str(input("Message? ")).upper()
keytext = str(input("Keytext? ")).upper()

# Length of keytext and message should be same.
assert len(message) == len(keytext)

alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for i in range(len(message)):
    place = alphabet.find(message[i])
    place2 = alphabet.find(keytext[i])
    newplace = (place + place2) % len(alphabet)
    code = alphabet[newplace]
    print(message[i], place2, code)

输出:

Message? hello
Keytext? abcde
H 0 H
E 1 F
L 2 N
L 3 O
O 4 S

推荐阅读