Python第019讲课后测试题:函数-我的地盘听我的

函数-我的地盘听我的

测试题:

0. 下边程序会输入什么?

def next():
	print('我在next()函数里...')
	pre()
	
def pre():
	print('我在pre()函数里...')
	
next()

有些编程语言不够 “聪明”,向这类向前引用的方式会导致报错,但Python足够 “醒目”,这段代码是正确的!

会输出:
	我在next()函数里...
	我在pre()函数里...

1. 请问以下这个函数有返回值吗?

>>> def hello():
		print('Hello China!')

如果没有使用 return 语句指定返回值,Python 也不是什么都不返回的,Ta会返回一个 None 对象,所以我们说 Python所有的函数都有返回值

>>> def hello():
		print('Hello China!')
		
>>> temp = hello()
Hello China!
>>> temp
>>> print(temp)
None
>>> type(temp)
<class 'NoneType'>

2. 请问 Python 的 return 语句可以返回多个不同类型的值吗?

可以,默认用逗号隔开,是以元组的形式返回,你当然也可以用列表包含起来返回:

>>> def myFun():
		return '啦啦啦啦', 306, 3.14, True
		
>>> myFun()
('啦啦啦啦', 306, 3.14, True)
>>> def myFun2():
		return ['小甲鱼', 1314, 5.12, False]
		
>>> myFun2()
['小甲鱼', 1314, 5.12, False]
>>>

3. 目测以下程序会打印什么内容?

def fun(var):				# 创建fun(var)函数,一个形参
	var = 1314				# 给形参赋值,成为实参
	print(var, end = '')	# 打印 var 实参,不换行
	
var = 520			# 定义变量,赋值 520
fun(var)			# 调用fun(var)函数
print(var)			# 打印变量 var

会打印:1314520

4. 目测以下程序会打印什么内容?

var = ' Hi '    # 定义变量,值为字符串

def fun1():             # 创建函数 fun1()
    global var   # 因为需要在函数内部对函数外的变量var进行操作,所以要在函数内部声明其为全局:global
    var = ' China '     # 修改 var 变量的值
    return fun2(var)    # 返回函数 fun2()以及Ta的实参var

def fun2(var):          # 创建函数 fun2(),形参为var
    var += 'I love you' # 给形参赋值,成为实参,并且进行字符串拼接
    fun3(var)           # 调用函数fun(),以及Ta的实参
    return var          # 返回实参var

def fun3(var):          # 创建函数 fun3(),形参为var
    var = '小甲鱼'     # 给形参赋值,成为实参

print(fun1())           # 调用函数fun1()并打印输出
 会打印:
 China I love you

我建议不到万不得已不要使用全局变量,简洁的概括为

(0) 代码可读性变差
(1) 代码安全性降低

以下关于全局变量的危言耸听是转来的,如下:

(0) Ta会造成不必要的常量频繁使用,特别当这个常量没有用宏定义 “正名” 时,代码阅读起来将万分吃力。

(1) 它会导致软件分层的不合理,全局变量相当于一条快捷通道,他容易使程序员模糊了 “设备层” 和 “应用层” 之间的边界。
写出来的底层程序容易自作多情地关注起上层地应用。
这在软件系统的构建初期的确效率很高,功能调试进度一日千里,但到了后期往往bug一堆,处处 “补丁”,雷区遍布。
说是度日如年举步维艰也不为过。

(2) 由于软件的分层不合理,到了后期维护,哪怕仅是增加修改删除小功能,往往要从上到下掘地三尺地修改,涉及大多数模块,而原有地代码注释却忘了更新修改,这个时候,交给后来维护者的系统会越来越像一个 “泥潭”,注释的唯一作用只是使 “泥潭” 上方再加一些迷烟瘴气。

(3) 全局变量大量使用,少不了有些变量流连忘返于中断与主回圈程序之间。
这个时候如果处理不当,系统的bug就是随机出现的,无规律的,这时候初步显示出病入膏肓的特征来了,没有大牛来力挽狂澜,注定慢性死亡。

(4) 无需多言,如果你的系统中大量使用全局变量,那么你已经成功得到一个畸形的系统,Ta处于一个神秘的稳定状态!你看着这台机器,机器也看着你,相对无言,心中发毛。
你不确定Ta什么时候会崩溃,也不晓得下一次投诉什么时候到来。

动动手:

0. 编写一个函数,判断传入的字符串参数是否为 “回文联”
(回文联即用回文形式写成的对联,即可顺读。例如:上海自来水来自海上)

程序执行结果:

>>>
请输入一句话:上海自来水来自海上
是回文联!
>>>
请输入一句话:啦啦啦操操操
不是回文联!
>>>

方法一:

def palindrome(string):		# 创建回文联函数 palindrome(),形参为string
	lenght = len(string)	# 取出字符串长度
	last = lenght - 1		# 定义变量,存放字符串长度减1
	lenght //= 2			# 注意这里用地板除
	flag = 1				# 定义变量标签,初始值 1	
	for each in range(lenght):				# 将字符串的长度依次赋值给each
		if string[each] != string[last]:	# if判断,当字符串的长度不等于字符串的长度减1时
			flag = 0						# 标签值为 0
		last -= 1							# 此时长度减1
		
	if flag == 1: 
		return 1		# 为真
	else:
		return 0		# 为假
		
string = input('请输入一句话:')	# 用户输入一句话
if palindrome(string) == 1:
	print('是回文联!')
else:
	print('不是回文联!')

方法二:

def palindrome(string):			# 创建回文联函数 palindrome(),形参为string
	list1 = list(string)		# 将形参转换成列表
	list2 = reversed(list1)		# 返回一个反转的列表迭代器
	if list1 == list(list2):	# if判断列表是否等于反转的列表迭代器时
		return '是回文联!'		# 是
	else:
		return '不是回文联'		# 否

string = input('请输入一句话:')	# 用户输入一句话
print(palindrome(string))			# 调用函数 palindrome(),此时形参string已经成为实参

1. 编写一个函数,分别统计出传入字符串参数(可能不止一个参数)的英文字母、空格、数字和其它字符的个数

程序执行结果:

count('I love China.com.', 'I love you, you love me.')
>>>
第 1 个字符串共有 : 英文字母 13 个 , 数字 0 个 , 空格 2 个 , 其他字符 2 个。
第 2 个字符串共有 : 英文字母 17 个 , 数字 0 个 , 空格 5 个 , 其他字符 2 个。
>>>
def count(*param):			# 创建计数函数 count(),*param为收集参数
	lenght = len(param)		# 取出收集到的参数的长度
	
	for i in range(lenght):		# 将收集到的参数的长度依次赋值给 i
		letters = 0		# 定义字母变量,初始值为 0
		space = 0		# 定义空格变量,初始值为 0
		digit = 0		# 定义数字变量,初始值为 0
		others = 0		# 定义其他字符变量,初始值为 0
		
		for each in param[i]:		# 再将收集到的参数依次赋值给 each
			if each.isalpha():		# if判断字符串是否由字母组成
				letters += 1	# 是,则开始统计字母的个数
			elif each.isdigit():	# elif判断字符串是否由数字组成
				digit += 1		# 是,则开始统计数字的个数
			elif each == ' ':		# elif判断字符串是否由空格组成
				space += 1		# 是,则开始统计空格的个数
			else:					# 否则属于其他字符组成
				others += 1		# 开始统计其他字符的个数
		
		# 打印提示,将字符串格式化输出
		print('第 %d 个字符串共有 : 英文字母 %d 个 , 数字 %d 个 , 空格 %d 个 , 其他字符 %d 个。' % (i+1, letters, digit, space, others))

count('I love China.com.', 'I love you, you love me.')		# 调用计数函数count(),给Ta加入实参
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值