我正在尝试使用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)
感谢您的帮助:)
答案 0 :(得分:0)
您的代码中有一些内容不正确:
首先,在continue
或for
循环结束时,您不需要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
循环,这会过早地切断循环并且不编码所有人物。