(小甲鱼字符串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_Aelse:base = base_acipher.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)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部