2016-04-25 10 views
-5

私はここでいくつかの答えを見てきましたが、誰も私のために働いていませんでした。おそらくこのコードには多くの問題があることはわかっていますが、 ENDでの入力は、「はい」Python 3.1でコードを再起動する

Code = input("Do you want to encrypt or decrypt? ") 
Code = Code.upper() 
Answer = ["ENCRYPT","DECRYPT"] 

    if Code in Answer: 

      Plaintext = input("What's your message? ") 
      Plaintext = Plaintext.upper() 
      Shift = int(input("What's the shift number? ")) 
      LengthPT = len(Plaintext) 
      CodeLetter = "" 

      if Code == ("ENCRYPT"): 
        for i in range (0,LengthPT): 
          Pletter = ord(Plaintext[i]) -64 
          Codeletter = Pletter + Shift 
          if Codeletter > 26: 
            Codeletter = Codeletter - 26 
          Codeascii = chr(Codeletter + 64) 
          CodeLetter = CodeLetter + Codeascii 

      elif Code == ("DECRYPT"): 
        for i in range (0,LengthPT): 
          Pletter = ord(Plaintext[i]) -64 
          Codeletter = Pletter - Shift 
          if Codeletter < 0: 
            Codeletter = Codeletter + 26 
          Codeascii = chr(Codeletter + 64) 
          CodeLetter = CodeLetter + Codeascii 
    else: 
      print("Wrong answer.") 

    if Code == ("ENCRYPT"): 
      print("Encoded Message =", CodeLetter) 

    elif Code == ("DECRYPT"): 
      print("Decoded Message =", CodeLetter) 

    Answer2 = input("Do you want to restart? (Yes/No): ") 
+2

既存の回答が役に立たなかった場合、どのように別の回答が得られると思いますか?ループを使用します。 – jonrsharpe

+0

私がまだ見ていない答えを知っている人がいるかもしれないので、ちょうどうまくいくかもしれません。 – Connor

+0

Pythonには "Go to"ステートメントがありません。あなたが得ることができるのはループです。 –

答えて

3

は多くの方法がありますが、これは最短経路であるように思わある場合、コードは:

Answer2 = "Yes" 
while Answer2 == "Yes": 
    ... 
    Answer2 = input("Do you want to restart? (Yes/No): ") 

通常は、あまりにも.lower().strip() ANSWER2する場合があります。

+1

通常、余分な変数を取り除き、while while:whileループを使用したいと思うでしょう。答えが "はい"でなければ、あなたはループから抜け出します。 – Matthias

+0

@gautehコード全体に追加したそのソリューションの例を提供することは可能でしょうか?楕円部分を埋めてください。私はこれのすべてには全く新しいことを言いませんでしたので、あなたのソリューションを実装する方法は完全にはわかりません。 – Connor

+0

@Connor:あなたは省略記号がどこにあるかにあなたのコードをすべて入れます。必要に応じて2番目のAnswer2行を修正します。それがうまくいかない場合(例えば、省略記号を印刷する( "a")に変更するなど)、非常に単純なwhileループを少し試してみてください。 – gauteh

-1

すべてを機能させる。答えが「はい」であることを確認してから、再度関数を呼び出します。再帰はPythonではうまくいきますので、これはうまくいきます。

+3

Pythonでは再帰がうまくいかず、ジャンプマークとして関数を使うのはすべての言語で間違っています。 – Matthias

+0

Python(悲しいことに)は、テールコールの最適化https://en.wikipedia.org/wiki/Tail_callを持っていません。したがって、関数を再帰的にすると、デフォルトのスタックサイズに制限されます。しかし、Pythonでの再帰の使用は、言語ではなく言語に対して作業するように感じます。 – Michelrandahl

+0

@MatthiasとMitzhありがとう、私は再帰がpythonでとても悪いと考えられていたことを認識していませんでした。 – TKoL

関連する問題