2017-12-14 10 views
-1

私の義務は、2つの関数でプログラムを作ることです。第1の機能は、ユーザが単語を挿入し、プログラムが同じ単語を印刷するが、"*"を各文字の間に印刷することである。 "*t*a*b*l*e*"、これは問題なく動作しています。関数、単純な暗号化初心者レベル

私は第二の機能を支援、プログラムは同じ言葉をプリントアウトしますが、文字が一つの場所に移動した、例"ABCD"は「BCDE"になります必要があります。私は、アルファベットで配列を作ることによって開始しているが、私はしないでください。継続する方法を知っている

ここでは私のコードです:

for i in range(len(s)): 
    print("*",s[i],sep='',end='') 
    print("*") 

def krypt(): 
    for i in(alfabet): 
     print() 

text = input("write a word ") 
stars(text) 
krypt() 
print() 
+1

は、あなたの思考プロセスを通して私たちを歩きます。アレイを選ぶのはなぜですか?配列がすべてのインデックスに対して返されるようにしますか? –

+0

関数 'ord'と' chr'は、おそらくはモジュロ演算子 '%'とおそらく 'bytearray'を使うのに便利かもしれません。または、辞書マッピングで永遠にハードコードし、 'str.translate'を使用します。 – timgeb

+0

最初の機能に関するご質問がない場合は、それに言及してください。また、Zをシフトするときの動作はどうでしょうか?それは大文字と小文字の両方をサポートすべきでしょうか? – Reti43

答えて

0

あなたは文字alphabetのリストを持っている場合は、次のように行うことができます。

def krypt(): 
    print ([alfabet[-1]] + alfabet[:-1]) 
0

はこれを見てください:辞書dアウト

import string 


def krypt(str_to_encrypt, n=1): 
    alpha = string.ascii_lowercase 
    d = {k: v for k, v in zip(alpha, alpha[n:] + alpha[:n])} 
    out_s = ''.join(d.get(x.lower(), x) for x in str_to_encrypt) 
    encrypted_str = ''.join(s.upper() if str.istitle(str_to_encrypt[i]) else s for i, s in enumerate(out_s)) 
    return encrypted_str 


text = 'BCeD' 
print(krypt(text))  # -> 'CDfE', default step is 1 
print(krypt(text, 7)) # -> 'IJlK' 

印刷はあなたにそれの後ろの力学についての考えを与える:

>> d 
{'a': 'b', 'b': 'c', 'c': 'd', ... 'y': 'z', 'z': 'a'} 

  • ケース保存
  • は非ハンドルアルファベット文字(そのまま残します)。
+0

辞書に大文字と小文字の両方が含まれている場合は、その文字列に対して1つのパスしか必要ありません。また、パラメータを使ってシフトを一般化することで、シーザー暗号が得られます。 – Reti43

+0

@ Ev.Kounis great!できます。 – djprofiler

1

基本的にあなたがシーザー暗号として知られているしようとしている暗号化

あなたは試すことができます:

data = "ABCD" 
shift = 1 
encypted_data_array = [] 
def krypt(): 
    for i in data: 
     new = chr(ord(i) + shift) 
     encypted_data_array.append(new) 
print "".join(encypted_data_array) 
+0

Zを超えて移動した文字が予期しない結果をもたらすため、モジュロ演算のいくつかの種類を忘れないでください。 – Reti43

+0

ええ、Zまたはzの後で、再びモジュロ演算を適用してA/aにトラバースすることができます。 – Harsha

+0

ありがとう、私はline8、(印刷)の無効な構文エラーを取得するデータは、ユーザーが入力する単語ですか? – djprofiler

0

あなたが1増加したりするために25の減少指数との手紙をしたいです各文字は 'a'がインデックス0の場合 'b'はインデックス1またはインデックス-25(英語アルファベット)です。リストの末尾から始まる は、範囲外のインデックスを生成しません。

この理論で、あなたが書くことができます。

import string 

alphabet = string.ascii_lowercase 
def kcrypt(word): 
    return ''.join(alphabet[alphabet.index(l)-len(alphabet)+1] for l in word) 

print kcrypt(word) 
+0

ありがとうございます。 – djprofiler

+0

26文字の場合、+1と-25は同じ文字のインデックスです。 string.ascii_lowercase [x + 1] == string.ascii_lowercase [x-25]はtrueです。 – Gsk

関連する問題