Python 密码和嵌套循环
Python cypher and nested loops
我是 python 的新手,我遇到了密码问题。
我需要显示与两个输入语句相关的 3 列。
用户输入是 'message' 和 'keytext'。
第一列只是一次吐出 'message' 一个字母。
第二列显示 '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 列放入循环中......
有没有人对我如何解决这个问题有任何建议?任何帮助将不胜感激。
谢谢!
你确实想出了怎么做——除了一个小偏差。在内部 for
循环中,j
遍历 keytext
并覆盖 code
。因此与预期输出的偏差。您所要做的就是删除内部 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
我是 python 的新手,我遇到了密码问题。 我需要显示与两个输入语句相关的 3 列。 用户输入是 'message' 和 'keytext'。 第一列只是一次吐出 'message' 一个字母。 第二列显示 '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 列放入循环中...... 有没有人对我如何解决这个问题有任何建议?任何帮助将不胜感激。
谢谢!
你确实想出了怎么做——除了一个小偏差。在内部 for
循环中,j
遍历 keytext
并覆盖 code
。因此与预期输出的偏差。您所要做的就是删除内部 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