说明:以下内容来自”风变编程“学习后的笔记梳理,仅为自己学习梳理干货和同学者阅读参考,不得转载。
1.函数
DRY原则——Don’t Repeat Yourself
def math(x): # 定义函数名和参数
y = 3*x + 5 # 函数体
return y # 返回
# 函数名:1. 名字最好能体现函数的功能,一般用小写字母和单下划线、数字等组合
# 2. 不可与内置函数重名(内置函数不需要定义即可直接使用)
def math(x):
# 参数:根据函数功能,括号里可以有多个参数,也可以不带参数,命名规则与函数名相同
# 规范:括号是英文括号,后面的冒号不能丢
y = 3*x + 5
# 函数体:函数的执行过程,体现函数功能的语句,要缩进,一般是四个空格
return y
# return语句:后面可以接多种数据类型,如果函数不需要返回值的话,可以省略
函数中常见参数类型:
位置参数、默认参数、不定长参数
def opening():
print('总有一种味道能温暖你~')
print('深夜食堂正式开业啦!')
print('欢迎来自五湖四海的你前来品尝!')
opening()
没有return语句的函数,Python会在末尾隐性地加上return None,即返回None值。
默认参数必须放在位置参数之后。不过默认参数并不意味着不能改变.
def menu(appetizer, course, dessert = '绿豆沙'):
print('一份开胃菜:' + appetizer)
print('一份主食:' + course)
print('一份甜品:' + dessert)
menu('话梅花生','牛肉拉面')
#因为已经默认将'绿豆沙'传递给dessert,调用时无须再传递。
def menu(appetizer, course, dessert = '绿豆沙'):
print('一份开胃菜:' + appetizer)
print('一份主食:' + course)
print('一份甜品:' + dessert)
menu('话梅花生','牛肉拉面')
menu('话梅花生','牛肉拉面','银耳羹')
#银耳羹对应参数dessert
不定长参数:传递给参数的数量是可选的、不确定的。
它的格式比较特殊,是一个星号*加上参数名,它的返回值也比较特殊,为元组。
def menu(*barbeque):
return barbeque
order = menu('烤鸡翅','烤茄子','烤玉米')
#括号里的这几个值都会传递给参数barbeque
print(order) # ('烤鸡翅','烤茄子','烤玉米')
print(type(order)) # <class 'tuple'>
元组的写法是将数据放在小括号()中,它的用法和列表用法类似,主要区别在于列表中的元素可以随时修改,但元组中的元素不可更改。
print()函数的完整参数:
print(*objects, sep = ' ', end = '\n', file = sys.stdout, flush = False)
函数,不仅可以支持输入多个参数,而且也可以同时输出多个值,需将返回的值写在return语句后面,用英文逗号隔开即可。
import random
appetizer = ['话梅花生','拍黄瓜','凉拌三丝']
def coupon(money):
if money < 5:
a = random.choice(appetizer)
return a
elif 5 <= money < 10:
b = random.choice (appetizer)
return b, '溏心蛋'
result = coupon(6)
# result是一个元组
print(result[0]) # 提取元组中的元素
print(result[1]) # 提取元组中的元素
另外一种方式:我们也可以同时定义多个变量,来接收元组中的多个元素:
dish, egg = coupon (7)
# 元组的两个元素分别赋值给变量dish和egg
print(dish)
print(egg)
2. 多函数的配合
当多个函数同时运行时,就涉及函数中一个非常重要的概念 —— 变量作用域:
(1)一个在函数内部赋值的变量仅能在该函数内部使用(局部作用域),它们被称作【局部变量】,如cost()函数里的variable_cost。
icon
(2)在所有函数之外赋值的变量,可以在程序的任何位置使用(全局作用域),它们被称作【全局变量】,如第一行的rent。
rent = 3000
def cost():
utilities = int(input('请输入本月的水电费用'))
food_cost = int(input('请输入本月的食材费用'))
variable_cost = utilities + food_cost
print('本月的变动成本是' + str(variable_cost))
def sum_cost():
sum = rent + variable_cost
print('本月的总成本是' + str(sum))
cost()
sum_cost()
# 运行会出现错误——NameError: name 'variable_cost' is not defined
解决办法:
(1)取巧:把局部变量都放在函数外,变成全局变量。
(2)global语句:global语句一般写在函数体的第一行,它会告诉Python,“我希望variable_cost是个全局变量,所以请不要用这个名字创建一个局部变量”。
3. 函数的嵌套
def语句后的代码块只是封装了函数的功能,如果没有被调用,那么def语句后面的代码永远不会被执行。
index() 函数:
用于找出列表中某个元素第一次出现的索引位置。
语法:list.index(obj),obj为object(对象)的缩写。
格式化:
%s 表示格式化一个对象为字符
Hello %s, my name is %s" % ('john', 'mike') # Hello john, my name is mike".
如果您使用int而不是字符串,请使用%d而不是%s。
"My name is %s and i'm %d" % ('john', 12) #My name is john and i'm 12
猜拳游戏:
# case 8 猜拳游戏
import random
# 出拳
punches = ['石头','剪刀','布']
computer_choice = random.choice(punches)
user_choice = ''
user_choice = input('请出拳:(石头、剪刀、布)') # 请用户输入选择
while user_choice not in punches: # 当用户输入错误,提示错误,重新输入
print('输入有误,请重新出拳:')
user_choice = input()
# 亮拳
print('————战斗过程————')
print('电脑出了:%s' % computer_choice)
print('你出了:%s' % user_choice)
# 胜负
print('—————结果—————')
if user_choice == computer_choice: # 使用if进行条件判断
print('平局!')
# 电脑的选择有3种,索引位置分别是:0石头、1剪刀、2布。
# 假设在电脑索引位置上减1,对应:-1布,0石头,1剪刀,皆胜。
elif user_choice == punches[punches.index(computer_choice)-1]:
print('你赢了!')
else:
print('你输了!')
3. Debug
四种情况:粗心;知识不熟练;思路不清;被动掉坑
bug1-粗心:
(1)^代表bug发生的位置。
(2)SyntaxError:语法错误
(3)=和==
bug2-知识不熟练:
当你发现知识点记不清或者不能确定的时候,就要及时复习或者上网搜索。不要强行写出自己不敢确定的代码,这种情况往往容易出错。如append()用法不熟练的话,先网上查一下正确用法:
a = []
a.append('A')
a.append('B')
a.append('C')
print(a)
bug3-思路不清晰:
bug4-被动掉坑:
(1)“ValueError”:“传入无效的参数”-解决办法:type()函数
(2)异常处理的机制:用try…except…语句,在异常出现时即时捕获,然后内部消化掉。
while True:
try:
age = int(input('你今年几岁了?'))
break
except ValueError:
print('你输入的不是数字!')
if age < 18:
print('不可以喝酒噢')
num = [1,2,0,3]
for x in num:
try:
#尝试执行下列代码
print (6/x)
#使用6除以num中的元素,并打印
except ZeroDivisionError:
#除非发生ZeroDivisionError报错,执行下列代码:
print('0是不能做除数的!')
#打印“0是不能做除数的!”
Python的所有报错类型查阅地址:
https://www.runoob.com/python/python-exceptions.html