簡體   English   中英

python中的caesar密碼問題

[英]caesar cipher problems in python

我有以下代碼,它給出了錯誤,說它不能隱式地將'int'對象轉換為str。 如果使用了if語句,那么如果WORD中的一個字母是ascii 125而我不得不將它移動5,我希望轉換為轉到ascii 32並計算。 如果單詞中的任何字母小於ascii 32 shift,則轉移到32。

word=input("enter something to encrypt")
offset=int(input("Enter a number to shift it by"))
     for char in word:
        newword= ord(char)
        newword =newword+ chr(newword) + offset
        if newwword<32:
            result=result+95
        elif newword >126:
            result=result-95

你寫的代碼有點令人費解我害怕。 但有幾點指出:

  • 你的for循環不應該縮進。
  • 您在if語句中計算的“結果”不會在任何地方使用。 我不確定這是故意的嗎?

你得到的錯誤來自這一行:

newword =newword+ chr(newword) + offset

newword是此語句之前的整數,因為ord(char)返回一個整數。

調用chr(newword將其轉換為字符......但是您嘗試將偏移量(這是一個整數)添加到該字符。

也許你在這一行上的意思是更像newword = newword + chr(newword + offset)

但是,這不會讓你產生一個“單詞”的凱撒密碼,因為你每次在這里進行賦值時都會用新字符覆蓋以前移位的字符 - > newword= ord(char)

總的來說,我可能會建議您對代碼進行以下更改:

word=input("enter something to encrypt")
offset=int(input("Enter a number to shift it by"))
newword = ""
for char in word:
    newchar = ord(char)
    newchar = newchar + offset
    if newchar < 32:
        newchar = newchar + 95
    elif newchar > 126:
        newchar = newchar - 95
    newword = newword + chr(newchar)
print("Encrypted word: " + newword)

兩個問題:

1)你在每次循環迭代中設置newword,這樣你就永遠不會得到完整的結果。

2)您將newword與整數進行比較。 您應該保存ord值,為其添加偏移量,將其與32和126進行比較,使用chr將其轉換回char,然后將其添加到在循環外部使用""初始化的newword,並在循環之后打印新詞。 所有這些步驟的順序都很重要!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM