2017-09-17 441 views
-3

古いコードをいくつか取り除きましたが、コードの特定の行にジャンプする方法を知りたいのです。つまり、ifステートメントがあれば、別の方法で言わない限り何かを行います。とにかく、私がしたいのは、ifステートメントが終了したときか、elseビットに達したときです。もう一度やり直すのではなく、コードの特定の行から始めます。私は、下記の多くを説明します:特定のコード行(Python)に戻る方法

CODE:しかし、私はしたい。この行の下You must enter either 'encrypt' or 'decrypt'!

def main(): 
    abc = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz' 
    message = input("What's the message to encrypt/decrypt? ") 
    def keyRead(): 
     try: 
      return int(input("What number would you like for your key value? ")) 
     except ValueError: 
      print("You must enter a number!") 
      main() 
    key = keyRead() 
    choice = input("Choose: encrypt or decrypt. ") 
    if choice == "encrypt": 
     encrypt(abc, message, key) 
    elif choice == "decrypt": 
     encrypt(abc, message, key * (-1)) 
    else: 
     print("You must chose either 'encrypt' or 'decrypt!'") 
     main() 

def encrypt(abc, message, key): 
    cipherText = "" 
    for letter in message: 
     if letter in abc: 
      newPosition = (abc.find(letter) + key * 2) % 52 
      cipherText += abc[newPosition] 
     else: 
      cipherText += letter 
    print(cipherText) 
    return cipherText 

main() 

それでは、私が本当にしたいことは、ユーザが入力encryptdecryptない場合、それは彼らにメッセージが表示されるということですそれはの部分に戻って、messageの部分には戻っていません。もしこれを行う方法があれば、本当に私を助けてくれてありがとう!ループはいえ

+1

ユーザーに暗号化または復号化を要求するコードをループで囲むことができます。受け入れられたオプションに答えると、ループを終了することができます。ただし、応答が暗号化または復号化されていない場合は、ループが続行され、質問が再開されます。 – Kyle

+0

'!='は 'is not'と同じですか?これは私がやっていることです: '選択中="暗号化 "または選択!="復号化: "'それはあまりうまく動作しないようです:/ – Kieran

+0

[Here](https://stackoverflow.com)/questions/2209755/python-operation-vs-is-not)は、この2つの間の説明です。 – Kyle

答えて

0

が最良のあなたのケースに合った、しかし、あなたは本当に戻って、特定の行にジャンプすることができます:バックラインkey = keyRead()にジャンプする

import sys 

def jump(lineno): 
    frame = sys._getframe().f_back 
    called_from = frame 

    def hook(frame, event, arg): 
     if event == 'line' and frame == called_from: 
      try: 
       frame.f_lineno = lineno 
      except ValueError as e: 
       print "jump failed:", e 
      while frame: 
       frame.f_trace = None 
       frame = frame.f_back 
      return None 
     return hook 

    while frame: 
     frame.f_trace = hook 
     frame = frame.f_back 
    sys.settrace(hook) 

使用この機能。また、goto implementation in the wildがあります。

関連する問題