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)