[英]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
你寫的代碼有點令人費解我害怕。 但有幾點指出:
你得到的錯誤來自這一行:
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.