[PyLv 1]シーザーパスワード


問題の説明


1つの暗号化方法は、1つの文の各アルファベットを一定の距離で伸ばし、別のアルファベットに変換することです.例えば、「AB」は1で「BC」、3で「DE」を表す.「z」が1に等しいと「a」になります.文字列sと距離nを入力し、sがnの暗号文の関数を生成し、ソリューションを完了します.

せいげんじょうけん

  • スペースはいくら押しても空いています.
  • sには、小文字、大文字、スペースのみが含まれます.
  • sの長さは8000未満です.
  • nは1以上25以下の自然数です.
  • I/O例



    方法


    久しぶりに時間がかかりました
    I/Oの例で問題が解決しました.
    採点段階で合格しなかった.
    問題は何ですか.長い間悩んでいたが、次のような状況に問題があったようだ.
    大文字Wはアスキーコードで87です.
    ここではnを24と仮定し,合計111とする.
    大文字ZはAskyコード、**はAskyコード、90です.
    ダミーが111の場合、90を超えます.
    このとき再びAから21(111-90)番目の位置で
    アルファベットを表示する必要がありますが、その前にコードで実現されたアルゴリズムは
    このような問題は解決できない.
    問題を解決するには、最初から書き直すべきだと思います.
    書き直しました.
    😣😥 2時間半の苦労を経て、やっと問題を解くことができました・・・
    =============================================================
    def solution(s, n):
        str = list(s)
        for i in range(len(str)):
            if str[i].isupper():
                str[i] = chr((ord(str[i]) - ord('A')+n)%26 + ord('A'))
            elif str[i].islower() :
                str[i] = chr((ord(str[i])- ord('a')+n)%26 + ord('a'))
    
        return ''.join(str)