求解python习题,维吉尼亚密码,用while循环

【问题描述】

   凯撒加密由于方法简单很容易破解,于是16世纪,法国亨利三世王朝的布莱瑟-维吉尼亚将凯撒密码做了推广,他引入了更复杂的密钥。

维吉尼亚加密使用的秘钥是一串文本,在加密时将明文的字符移动对应的密钥字符所给出的位数,得到经过更复杂加密过程的密文,具有更高的安全性。

【输入形式】

输入的第一个参数为一个字符串,即密钥,中间以一个分号";"分隔后,第二个参数为待加密明文。
【输出形式】

经过加密后的密文字符串。请注意,在分割字符串时调用split函数请以";"作为分隔符,即.split(";")。

【样例输入】

NUDT;Winter Holiday
【样例输出】

Jcqmrl Abflwns
【样例说明】

注意!!明文中空格也要占用一位密钥字符,但无须对空格字符加密。

key,s=input().split(';')
key=key.upper()
l=[ord(i)-ord('A') for i in key]
j=0
real=''
for i in s:
    if i!=' ':
        if i.islower():
            t=ord(i)+l[j%4]
            if t>ord('z'):
                t=ord('a')-1+t%ord('z')      
            i=chr(t)   
        elif i.isupper():
            t=ord(i)+l[j%4]
            if t>ord('Z'):
                t=ord('A')-1+t%ord('Z')   
            i=chr(t)
    real+=i
    j+=1
print(real)
key, s = input().split(';')
key = key.upper()
list1 = [ord(i) - ord('A') for i in key]
j = 0
real = ''
for i in s:
    if i != ' ':
        if i.islower():
            t = ord(i) + list1[j % len(key)]
            if t > ord('z'):
                t = ord('a') - 1 + t % ord('z')      
            i = chr(t)   
        elif i.isupper():
            t = ord(i) + list1[j % len(key)]
            if t > ord('Z'):
                t = ord('A') - 1 + t % ord('Z')   
            i = chr(t)
    real += i
    j += 1
print(real)