(小甲鱼字符串IV编程)1.编写一个生成凯撒密码的程序。2.给定一个字符串数组 words,只返回可以使用在美式键盘同一行的字母打印出来的单词,键盘布局如下图所示。

1.编写一个生成凯撒密码的程序

科普:
凯撒密码最早由古罗马军事统帅盖乌斯·尤利乌斯·凯撒在军队中用来传递加密信息,故称凯撒密码。

原理:
凯撒密码是一种通过位移加密的方法,对 26 个(大小写)字母进行位移加密,比如下方是正向位移 6 位的字母对比表:

明文字母表如下
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

密文字母表如下
GHIJKLMNOPQRSTUVWXYZABCDEFghijklmnopqrstuvwxyzabcdef

所以,如果给定加密的明文是:
I love FishC

那么程序加密后输出的密文便是:
O rubk LoynI

程序实现如下:
在这里插入图片描述答案代码:

plain = list(input("请输入需要加密的明文(只支持英文字母):"))
key = int(input("请输入移动的位数:"))
    
base_A = ord('A')
base_a = ord('a')
    
cipher = []
for each in plain:
    if each == ' ':
        cipher.append(' ')
    else:
        if each.isupper():
            base = base_A
        else:
            base = base_a
        cipher.append(chr((ord(each) - base + key) % 26 + base))
    
print(''.join(cipher))

解析:chr((ord(each) - base + key) % 26 + base)的理解可以参考一下 字符串I
这里举个例子:
刚开始第一个字符为大写I时:

chr((ord(each) - base + key) % 26 + base)
ord(each)=ord('I')=73  ,   
base=ord('A') = 65,base的值是由if语句得到的,
所以最终结果为chr((ord('I')-65+6)%26+65)=chr((73-65+6)%26+65)=chr(79)='0'
得证,第一个字符'I'对应的密文是'0'

科普:
python判断字符串大小写的三大函数——islower、isupper、istitle函数的用法

string.islower() 判断字符串的区分大小写的字符是否全为小写。
string.isupper() 字符串中的所有字母是否都是大写的。如果所有字母都是大写的,该函数返回真。
string.istitel() 判断字符串的的所有单词是否首字母(开头)是大写其他为小写。

举例:

string1 = 'abcde666'
string1.islower() #输出结果为:TRUE
string1.isupper()  #输出结果为:FALSE
string1.istitle()   #输出结果为:FALSE

结果:
在这里插入图片描述

2.给定一个字符串数组 words,只返回可以使用在美式键盘同一行的字母打印出来的单词,键盘布局如下图所示。

在这里插入图片描述
美式键盘中:

  • 第一行由字符 “qwertyuiop” 组成
  • 第二行由字符 “asdfghjkl” 组成
  • 第三行由字符 “zxcvbnm” 组成

举例:
输入:words = [“Twitter”, “TOTO”, “FishC”, “Python”, “ASL”])
输出:[‘Twitter’, ‘TOTO’, ‘ASL’]

答案代码:

words = ["Twitter", "TOTO", "FishC", "Python", "ASL"]

res = []
for i in words:
    # 由于单词存在大小写,所以这里统一先转换为小写字母
    j = i.lower()
    # 灵活运用 strip() 方法,判断 j 是否所有字符都在键盘的同一行内
    if j.strip("qwertyuiop") == '' or j.strip("asdfghjkl") == '' or j.strip("zxcvbnm") == '':
        res.append(i)

print(res)

解析:
代码中strip()函数的使用,
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。

例1:

str = "00000003210Runoob01230000000"; 
print str.strip( '0' );  # 去除首尾字符 0 
str2 = "   Runoob      ";   # 去除首尾空格
print str2.strip()

#结果
3210Runoob0123
Runoob

例2:题目中的应用

>>> a="twitter"  #strip() 方法用于移除字符串头尾指定的字符序列
>>> a.strip("qwertyuiop")
''
>>>
>>> a="python"  #strip() 方法用于移除字符串头尾指定的字符序列
>>> a.strip("qwertyuiop")
'hon'
>>> 
>>> a="qrtyuiio"
>>> a.strip("qwertyuiop")
''

结果:
在这里插入图片描述

题目来自小甲鱼字符串(IV)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值