2

みなさん、こんにちは。質問があります。次のコードが出力やエラーを生成しないのはなぜですか?

これは、ユーザーコードを暗号化および復号化するコードです

alpha = ['a','b','c','d','e','f',
     'g','h','i','j','k','l',
     'm','n','o','p','q','r',
     's','t','u','v','w','x',
     'y','z']

shift = range(26)

def user_info():
    info = input("\nPress 'e' to encrypt or 'd' to decrypt: ").lower()
    if info == 'e' or 'd':
       return info

def user_message():
    code = input("What is your message?: ")
    return code

def user_shift():
     shift = int(input("What is your shift number?: "))
     while True:
         if shift == int(shift):
             return shift

def True_Message(info, code, shift):

    if info[0] == 'd':     #This encrypts the code 
         shift = -shift    

    for letter in code:
        if letter in alpha:
        alpha_2 = ord(letter) + shift
        secret_message = ""
    if alpha_2 in range (0, len(alpha)):
        final_mix = chr(alpha)
        secret_message += final_mix

return secret_message

info = user_info()
code = user_message()
shift = user_shift()
print(True_Message(info, code, shift))

エラーはないので何が悪いのかわかりません。私はこの暗号化に不慣れですが、これが正しい方向に進んでいるかどうかはわかりませんが、何かアイデアはありますか?ありがとうございました。

アップデート!!!!!

申し訳ありませんが、ユーザーの選択に基づいてコードを暗号化および復号化できることを期待しています

4

4 に答える 4

3

インデントとor演算子の使用法を確認する必要があります。

alpha = ['a','b','c','d','e','f',
     'g','h','i','j','k','l',
     'm','n','o','p','q','r',
     's','t','u','v','w','x',
     'y','z']

shift = range(26)

def user_info():
    info = input("\nPress 'e' to encrypt or 'd' to decrypt: ").lower()
    if info in ('e', 'd'): # 'or' does not work how you think it does
        return info

def user_message():
    code = input("What is your message?: ")
    return code

def user_shift():
     while True:
         shift = int(input("What is your shift number?: "))
         if shift == int(shift):
             return shift

def True_Message(info, code, shift):

    if info[0] == 'd':     #This encrypts the code 
         shift = -shift    

    for letter in code:
        if letter in alpha:
            alpha_2 = ord(letter) + shift
            secret_message = ""
    if alpha_2 in range (0, len(alpha)):
        final_mix = chr(alpha)
        secret_message += final_mix

    return secret_message
于 2013-03-24T00:37:28.173 に答える
1

Pythonはインデントに敏感な言語です。いたるところにインデントエラーがあります。

「エラーはありません」とどのように言うことができますか?スクリプトを実行していますか?Pythonインタープリターは、それらがどこにあるかを正確に教えてくれます。スクリプトを実行すると:

C:\Users\Jonathon\temp>python caesar.py
  File "caesar.py", line 22
    return shift
         ^
IndentationError: expected an indented block

したがって、最初のエラーはここにあります。

def user_shift():
     shift = int(input("What is your shift number?: "))
     while True:
         if shift == int(shift):
         return shift              # ---> Should be indented one more level
于 2013-03-24T00:31:28.363 に答える
1

他の人が言うように、あなたはいくつかのインデントの問題を抱えています。

ロジックレベルでは、それが必要かどうかを明確に確認する必要secret_message = ""があります。その他のポイント:

  • があり、シフトを追加した場合はどうなりますletterか?ZASCIIテーブルを確認してください
  • range(26)そもそもシフトをしたいですか?print(list(range(26)))範囲で何が起こっているかを確認してみてください。

また、落胆しないでください。ASCIIで遊ぶのは最初はイライラするかもしれませんが、慣れるととても楽しいものになります。

于 2013-03-24T00:53:04.083 に答える
-3

いや、これをチェックしてください。

from tkinter import *

                        #Functions. The first three do the job. The rest are about GUI
def wordlist(a):
    word_list=(list(a))
    return (word_list)

def length(a):
    return(len(wordlist(a))-1)

def encrypt(a,b):
    thelist=wordlist(a)
    i=0
    while i<=(length(a)):
        thelist[i]=(chr(ord(wordlist(a)[i])+(b)))
        i=i+1
    return (''.join(thelist))

def callback():    
    e.focus_set()
    a=e.get()

    e2.focus_set()
    b=int(e2.get())

    e3.delete(0, (length(a)+1))
    e3.insert(0,(encrypt(a,b)))

                        #User Interface

root = Tk(className="_Caesar Cipher Encryptor")


frame1 = Frame(root)
frame1.pack()

frame2= Frame(root)
frame2.pack()

frame3=Frame(root)
frame3.pack()


enter=Label(frame1, text="Enter Text:", bd=3, font="Ariel")
enter.pack(side=LEFT,fill=X)

shift=Label(frame2, text="Shift:", font="Ariel")
shift.pack(side=LEFT,fill=X)

result=Label(frame3,text="Encrypted Code:", font="Ariel")
result.pack(side=LEFT)


e= Entry(frame1,width=50, font="Ariel")
e.pack(side=RIGHT)

e2= Entry(frame2,width=10, font="Ariel")
e2.pack(side=LEFT)

e3=Entry(frame3, font="Ariel")
e3.pack(side=RIGHT)


b = Button(frame2, text="Encrypt", width=10, command=callback, font="Ariel")
b.pack(side=RIGHT)


mainloop()
于 2015-02-01T10:20:04.970 に答える