1.创建函数:
>>> def function():
print('123')
>>> function() #调用函数
123
加参数的函数:
>>> def compare(num1,num2): #写好函数的意义,参数的意义
if num1 < num2:
return(num1)
else:
return(num2)
>>> compare(123123123,5341345445355241)
123123123
2.DRY:
DRY是程序员们公认的指导原则:Don’t Repeat Yourself.快快武装你的思维吧,拿起函数,不要再去重复拷贝一段代码了!
3.bin函数作业:
自己编的:
#bin函数:
binyuan = input('请输入整数:')
binyuan = int(binyuan)
def bin1(x):
binlist = []
while x>1:#当运算完的x≤1时即可结束循环
binlist.append(x%2)
x = x//2
#小坑:此处应用floor除法
binlist.reverse()
binlist.insert(0,1)
#insert为list内置函数,insert函数括号内的索引值不需要加中括号
binlist2 = [str(each) for each in binlist]
#把列表里的每一个整数全都转化为字符串
shuchu = ' '.join(binlist2)
#把列表中的元素放在空串中,注意:列表里的元素一定都是字符串
return(shuchu)
print('转化成二进制的数为:' + bin1(binyuan))
范例:
#bin函数
def Dec2Bin(dec):
temp = []
#创建空列表
result = ''
#创建空字符串
while dec:
quo = dec % 2
dec = dec // 2
#除2取余操作相同
temp.append(quo)
#将余数添加到列表中
while temp:
result += str(temp.pop())
#这一步我tm惊为天人,pop函数可以直接取最后一个函数,就不用将列表倒序了
#然后这一步非常简洁的将列表形式转化为字符串,不需要再把列表中的每一个元素转化为字符串了
return result
print(Dec2Bin(62))
4.pow函数作业太简单就不放了
5.gcd函数作业:
我写的:
#gcd:算出输入的两个数的最大公约数的函数:
print('欧几里得算法公约数:')
temp1 = input('请输入第一个数:')#第一个数x
temp2 = input('请输入第二个数:')#第二个数y
#欧几里得算法:x = a*y + b
#最大公约数b就是较大数x/较小数y的余数
def gcd(x,y):
if x > y:#比较输入数大小,确定
small = y
big = x
else:
small = x
big = y
return(big%small)
temp1 = int(temp1)
temp2 = int(temp2)
print('它们的最大公约数是:',gcd(temp1,temp2))
范例:
print('欧几里得算法公约数:')
temp1 = input('请输入第一个数:')#第一个数x
temp2 = input('请输入第二个数:')#第二个数y
def gcd(x, y):
while y:
t = x % y
x = y
y = t
return x
temp1 = int(temp1)
temp2 = int(temp2)
print('它们的最大公约数是:',gcd(temp1,temp2))
6.形式参数,实际参数:
形式参数:定义时括号里的参数
实际参数:调用函数时,传递进来的实际的函数的值是实际参数
7.函数文档:
‘’里的叫函数文档,不会被打印:
>>> def jiafa(x,y):
'函数文档:这是一个加法的函数'
#注释:和注释有点区别,但是都不会被打印出来
he = x + y
return(he)
>>> jiafa(1,2)
3
>>> jiafa.__doc__ #函数的默认属性
'函数文档:这是一个加法的函数'
>>>
7.关键字参数:
>>> def xianshi(num1,num2):
num1 = str(num1)
num2 = str(num2)
print('第一个数字:' + num1)
print('第二个数字:' + num2)
>>> xianshi(num2=456,num1=123)
第一个数字:123
第二个数字:456
8.默认参数:
定义了默认值的参数,()不带参数时显示的值
>>> def xianshi(num1=123,num2=456):
num1 = str(num1)
num2 = str(num2)
print('第一个数字:' + num1)
print('第二个数字:' + num2)
>>> xianshi()
第一个数字:123
第二个数字:456
9.收集参数:不知道有几个参数时使用
>>> def test(*temp):
print('参数的长度是:',len(temp))
print('第三个参数是:',temp[2])
>>> test(1,2,3,4,5,6,7,8,9,0)
参数的长度是: 10
第三个参数是: 3
>>> def test(*temp,exp):
print('参数的长度是:',len(temp),exp)
print('第三个参数是:',temp[2])
>>> test(1,2,3,4,5,exp=12345)
参数的长度是: 5 12345
第三个参数是: 3
10.查找函数:
def findstr(str1,str2):
'统计第一个字符串参数(长度为2)在第二个字符串参数出现次数'
length = len(str2)
count = 0
if str1 not in str2:
print('在目标字符串中未找到子字符串!')
else:
for each in range(length - 1):
if str2[each] == str1[0]:
if str2[each + 1] == str1[1]:
count += 1
print('子字符串在目标字符串中共出现%d次' %count)
11.Python只有函数,没有过程:
12.返回值:可以返回多个值:
13.局部变量,全局变量:
局部变量:出了这个函数,变量是无效的
全局变量:作用范围:整个文件,函数内部修改它无用,可以在函数内部访问它
14.
for主要应用在遍历中:逐个循环一遍
while主要用于判断符合条件下循环
15.回文联函数:
我的:
#回文联
# 0 1 2
# -3-2-1 -(len-x) 3-0
temp = input('传入字符:')
list1 = []
list2 = []
#写一个遍历循环,使每个元素均满足回文条件
for each in temp:
list1.append(each) #这个是反的,下面要reverse
for each in temp: #将sort的数据储存在list1中
list2.append(each)
list2.reverse()
i = 0
while i < len(temp):
if list1[i] != list2[i]:
zhuang = 0
break
zhuang = 1
i += 1
if zhuang == 1:
print('是回文联')
else:
print('不是回文联')
范例:list的reverse()方法是返回None的,只会对列表内的元素逆序排序。而string的reserved()方法是会返回逆序后的字符串的。
def huiwen(string):
'判断传入的字符串是否为回文联'
list1 = list(string)
list2 = list(reversed(string)) #reversed返回的是字符串
if list1 == list2:
return '是回文联'
else:
return '不是回文联'
print(huiwen('上海自来水来自海上'))
list3 = [1,2,3]
print(list3.reverse())
16.统计函数:
我的:
def tong(str1,str2):
'这是一个统计输入的参数的各种字符类型的函数'
#因为输入的是字符串是一个个的元素的缘故,要把它们拆成一个个字符串放在列表里
list1 = []
for each1 in str1:
list1.append(each1)
for each2 in str2:
list1.append(each2)
alpha = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
number = ['1','2','3','4','5','6','7','8','9','0']
#写个遍历,加计数器
alp = 0
num = 0
space = 0
special = 0
for each in list1:
if each in alpha:
alp += 1
elif each in number:
num += 1
elif each == ' ':
space += 1
else:
special += 1
print('输入的字母共有:',alp)
print('输入的数字共有:',num)
print('输入的空格共有:',space)
print('输入的符号共有:',special)
tong('1 love y0u~~~','i am better 1314 ### &1') #3241
范例:
def tongji(*param):
'判断传入的参数中英文字母,空格,数字,其他字符的个数'
length = len(param)
for i in range(length): #循环的次数等于参数的个数
letters = 0
space = 0
number = 0
other = 0
for each in param[i]:
if each.isalpha(): #使用字符串的判断类型,而不是全部列出
letters += 1
elif each.isspace():
space += 1
elif each.isdigit():
number += 1
else:
other += 1
print('第%d个字符串共有:%d个英文字母,%d个空格,%d个数字,%d个其他字符'%(i+1,letters,space,number,other))
#用格式化打印
tongji('1 love y0u~~~','i am better 1314 ### &1')