Python奇怪的打印

时间:2017-03-23 17:49:08

标签: python python-3.x

我正在尝试使用ASCII在Python中创建一个Enigma机器。但我的脚本做了很奇怪的事情。如果它适用于3个字符的输入,有时会打印一个字符,有时是2个,有时是3.我不知道为什么。继承剧本。

import random

encrypt = {65:90, 66:90, 67:72, 68:78, 69:77, 70:83, 71:87, 72:67, 73:73, 74:89, 75:84, 76:81, 77:69, 78:68, 79:79, 80:66, 81:76, 82:82, 83:70, 84:75, 85:85, 86:86, 87:71, 88:88, 89:74, 90:65}

加密= []

r1 = random.randint(1,26)
r2 = random.randint(1,26)
r3 = random.randint(1,26)
security = str(r1) + "a" + "-" + str(r2) + "b" + "-" + str(r3) + "c"

input_en = input("Zadejte text, ktery chcete zasifrovat (pouzivejte velka      pismena): ")

for i in range(0,len(input_en)):
    coded = input_en[i]
    coded = ord(coded)
    coded = encrypt[coded]
    full = r1 + r2 + r3
    coded += full
    while(coded > 90):
        rekt = coded - 90
        coded = 65 + rekt
        continue
    done = chr(coded)
    encrypted.append(done)
    r1 += 1
    if r1 > 26:
        r1 = 1
        break
    r2 += 1
    if r2 > 26:
        r2 = 1
        break
    r3 += 1
    if r3 > 26:
        r3 = 1
        break
    continue
print(encrypted)
print("Bezpecnostni kod je",security)

感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

您的代码中有一些内容不正确:

首先,在continuefor循环结束时,您不需要while语句来让它们返回到开头。由于Python使用空格来表示代码块,因此只需在循环结束时单独输入就足够了,即:

while coded > 90:
    [do stuff]
    continue
done = chr(coded)
[the rest of your code]

--- Should be changed to ---

while coded > 90:
    [do stuff]
done = chr(coded)
[the rest of your code]

此外,break语句中的if命令没有按您认为的那样执行。看起来您正在使用break来表示if块的结束,但这是另一个示例,您需要做的就是取消下一段代码。

break命令退出最近的循环,在这种情况下意味着它们退出主for循环,这会过早地切断循环并且不编码所有人物。