内容正文:
项目12 函数变量的作用域、匿名函数及模块
编程基础——Python语言 /// ///
恺撒密码最早由古罗马军事统帅恺撒在军队中用来传递加密信息,故称恺撒密码。这是一种位移加密方式,只对26个字母进行位移替换加密。随着计算机的诞生及发展,解密古典密码变得非常容易。下面有一段利用恺撒加密的密文,请通过Python编程解密该内容,该密文为“AKQD{dbftbs_jt_hppe_cvu_Xfbl!} ” ,据悉密文中包含ZJPC字符。
任务23 解密恺撒密码——函数变量的作用域
任务描述
编程基础——Python语言 /// ///
任务分析
解密恺撒密码需要首先理解平移概念,就是在加密时将一段数据平移多少位,在解密时进行反平移即可得出原数据。以字母a~z为例,将a~z都平移三位得出密文,如图4-2所示。
图4-2 将a~z平移三位示意图
编程基础——Python语言 /// ///
知识准备
在Python中,变量的作用域是指变量的作用范围,即这个变量在什么范围内起作用。如果超出这个作用范围,则再次访问时就会出现错误。在程序中,一般会根据变量的作用范围将变量分为局部变量和全局变量。
1.局部变量
局部变量是指在函数内部定义并使用的变量,它只在函数内部有效,即在函数内部定义的变量,只有函数运行时才会创建,在函数运行前或函数运行完后,函数内部的变量就失效了。如果在函数外部调用函数内部的变量,就会抛出NameError异常错误。
2.全局变量
在程序开发过程中,有时需要在函数外部设定变量的初始值,然后在函数内访问、修改该初始值,这就需要定义全局变量。我们把函数内外部都可以访问的变量叫作全局变量。
4.4 局部变量和全局变量
编程基础——Python语言 /// ///
isalpha( )方法用于判断字符串是否仅由字母组成。
语法格式:
4.5 isalpha( )方法
str.isalpha( )
如果字符串中至少有一个字符是字母或所有字符都是字母,则返回True; 否则返回False。
如果字符串中至少有一个字符是汉字则isalpha( )方法也会返回True。对于汉字的判断,需要首先将其用encode( )函数编码,然后再利用isalpha( )方法判断。
编程基础——Python语言 /// ///
print('计算1+2+3+...+100')
result=0 #保存累加结果的变量
for i in range(1,101):
result+=i #实现累加功能
print(result) #在循环结束时输出累加结果
在上面的代码中,使用了range( )函数,该函数是Python的内置函数,用于生成一系列的整数,多用于for循环语句中,其语法格式如下:
range(start,end,step)
编程基础——Python语言 /// ///
根据任务分析,本任务代码设计如下:
任务实施
cipher_text='AKQD{dbftbs_jt_hppe_cvu_Xfbl!}' #定义密文为全局变量
def Encrypt(plaintext,key):
ciphertext = ''
for i in plaintext: #遍历明文
if i.isalpha( ): #判断是否为字母
if i.isupper( ): #判断是否为大写字母
# 明文是否为字母,如果是,则判断大小写,分别用ASCII进行解密
ciphertext += chr(65+(ord(i)-65+key)%26) #大写字母移位后转换解密
else:
ciphertext += chr(97+(ord(i)-97+key)%26) #小写字母移位后转换解密
else:
# 如果不为字母,则直接将其添加到密文字符里
ciphertext += i
编程基础——Python语言 /// ///
return ciphertext
for key in range(1,27): #遍历26次密文
flag=Encrypt(cipher_text,key)