2017-06-25 4 views
1

J'ai un problème avec mon code César.python caesar chr et ord sans newline et juste itérer dans l'alphabet

1) Je ne sais pas comment vérifier si un caractère est une ponctuation et imprimer sans somme.

2) imprimez le caractère sur la même ligne mais quand c'est fini, retournez un retour à la ligne. 3) Itérer à travers l'alphabet avec un grand nombre me renvoyer une ponctuation, comment puis-je faire pour renvoyer juste un personnage?

import sys 
import string 

def main(): 

    if len(sys.argv) != 2: 
     print("Usage: caesar.py k") 

    else: 


     k = int(sys.argv[1]) 

     if k == 1 or k <= 26: 

      text = input("plaintext: "); 
      j = len(text) 

      for i in range(j): 
       #check if is a character 
       if text[i].isalpha: 
        if text[i].islower(): 
         print(chr(ord(text[i]) + k),end = "") 
        if text[i].isupper(): 
         print(chr(ord(text[i]) + k),end = "") 
       elif text[i].punctuation(): 
        print(text[i]) 

     else: 
      print("You have to introduce a number between 1 and 26") 

main() 

Répondre

1

Essayez ce code:

import string 


def encrypt_ceasar(s, shift): 
    assert abs(shift) < 26, 'shift is between -25 and 25 (inclusive)' 
    encrypted_s = '' 
    for char in s: 
     if char.isalpha(): 
      is_upper = char.isupper() 
      char = char.lower() 
      pos_alphabet = ord(char) - ord('a') 
      new_pos = (pos_alphabet + shift) % 26 
      encryted_char = chr(ord('a') + new_pos) 
      if is_upper: 
       encryted_char = encryted_char.upper() 
      encrypted_s += encryted_char 
     else: 
      encrypted_s += char 
    return encrypted_s 


def decrypt_ceasar(s, shift): 
    return encrypt_ceasar(s, -shift) 


if __name__ == "__main__": 
    s = 'AbC1$de#zy' 
    encrypted_s = encrypt_ceasar(s, 3) 
    print('s:', s) 
    print('encrypted_s:', encrypted_s) 
    print('again s:', decrypt_ceasar(encrypted_s, 3)) 

Sortie:

s: AbC1$de#zy 
encrypted_s: DeF1$gh#cb 
again s: AbC1$de#zy 
+0

Merci beaucoup, cela fonctionne très bien :) – Sebastiano

+0

bien sûr. Maintenant je peux, avant que je ne puisse pas voter parce que je n'avais pas assez de réputation – Sebastiano