我是 python 新手,正在做一個測驗程式,用符號替換給定文本中的所有字母。
def encrypted(request):
text = request.GET['text']
text = text.replace("a", "#.")
text = text.replace("b", "##.")
text = text.replace("c", "###.")
text = text.replace("d", "####.")
text = text.replace("e", "#####.")
text = text.replace("f", "######.")
etc...
return render(request, 'encrypted.html', {'text': text})
我已經實作了這一點,但我嘗試以相同的方式反轉它,但它不起作用。
def decrypted(request):
ftext = request.GET['text']
ftext = ftext.replace("#.", "a")
ftext = ftext.replace("##.", "b")
ftext = ftext.replace("###.", "c")
ftext = ftext.replace("####.", "d")
ftext = ftext.replace("#####.", "e")
etc...
return render(request, 'decrypted.html')
所以文本根本不會出現在頁面上。
<html lang="en">
<head>
<meta charset="UTF-8">
<title>yCrypt</title>
</head>
<body>
TEXT DECRYPTION: {{ftext}}
</body>
</html>
我想知道為什么它沒有顯示任何代碼問題。也許有一種更簡單的方法可以使這成為可能?
uj5u.com熱心網友回復:
不是專家,但你可以試試
def decrypted(request):
ftext = request.GET['text']
ftext = ftext.replace("#.", "a")
ftext = ftext.replace("##.", "b")
ftext = ftext.replace("###.", "c")
ftext = ftext.replace("####.", "d")
ftext = ftext.replace("#####.", "e")
return render(request, 'decrypted.html',{'ftext':ftext})
uj5u.com熱心網友回復:
我并沒有完全遵循您在此處嘗試執行的操作,但是您replace在decrypted函式中的第一次呼叫將查找并替換每個出現的“#”。每個“加密字母”中都有字母“a”,而不僅僅是“a”的字母。
后續呼叫replace不會匹配任何內容,因為它們的尾隨“#”。已經被錯誤地替換為字母“a”。
要使其按設計作業,您必須顛倒replace呼叫順序,以便首先找到最長的匹配項。
為了渲染它,你還必須在背景關系中將它傳遞給你的模板渲染器。
def decrypted(request):
ftext = request.GET['text']
etc...
ftext = ftext.replace("#####.", "e")
ftext = ftext.replace("####.", "d")
ftext = ftext.replace("###.", "c")
ftext = ftext.replace("##.", "b")
ftext = ftext.replace("#.", "a")
return render(request, 'decrypted.html', { "ftext": ftext })
uj5u.com熱心網友回復:
它不起作用的原因是 a 的編碼是 b、c、d、e 等的子串。
a = #.
b = ##.
c = ###.
如您所見#.,在每個編碼字串的末尾
所以當你第一次編碼時,假設abc它變成了#.##.###.
當你運行你使用的解碼步驟時,replace("#.", "a")你得到的結果a#a##a是每一個都#.被替換了a,正如你所看到的那樣,沒有剩下的點。
解決方法很簡單,不用###.格式化,用.###.format
a = .#.
b = .##.
c = .###.
這將確保只有正確的#匹配數而不是子字串。
所以當你第一次編碼時,假設abc它變成了.#..##..###.
當你運行你使用的解碼步驟時,你replace(".#.", "a")會得到結果,a.##..###.因為你可以看到 b 和 c 的代碼仍然存在。
附帶說明一下,您可以使用回圈使代碼更小。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/334321.html
上一篇:如何在同級視圖之間傳遞環境物件?
