def say(): #函数名
   print('hello')#函数体
#函数不调用是不会被执行的
# say()  #调用函数
#函数的参数
def calc(a,b):  #形参, 形式参数
   #位置参数,必填参数
   res = a * b
   print('%s * %s = %s'%(a,b,res))
# calc(7,8)  #实参,实际参数
def op_file(file_name,conent=None):
   #默认值参数,它是非必填的
   f = open(file_name,'a+',encoding='utf-8')
   f.seek(0)
   if conent:#不为空代表写
      f.write(conent)
      f.flush()
   else:
      all_users = f.read()
      return all_users  #调用完函数之后,返回什么结果
   f.close()
# res = op_file('a.txt')
# print(res)
def haha():
   #函数里面遇到return函数就立即结束了
   for i in range(5):
      print(i)
      if i==3:
         return  #只写一个return的话,就返回None
# res = haha()
# print(res)
import string
def check(pwd):
   #长度6-11
   #字母和数字吧
   if len(pwd)>5 and len(pwd)<12:
      if set(pwd) & set(string.ascii_letters) and set(pwd) & set(string.digits):
         print('密码合法')
      else:
         print('密码不合法')
   else:
      print('密码不合法')
# res = check('asd1234')  #函数里面如果没有return的话,默认返回None
# print(res)
# l = [1,6,8,2,4,8,9]
# print(l.sort())
# print(l)
def is_float(s):
   s = str(s)
   if s.count('.')==1:#小数点个数
      s_list = s.split('.')
      left = s_list[0]  #小数点左边
      right = s_list[1] #小数点右边
      if left.isdigit() and right.isdigit():  #正小数
         return True
      elif left.startswith('-') and left.count('-')==1 and \
            left.split('-')[1].isdigit() and \
            right.isdigit():  #判断合法负小数
            return True
   return False
# 1.98
# -2.50
# retrun True
# retrun False
# 1.98
# 1.98.23
# -1.90
#  需求分析:
   #1、 小数点个数  .count()
   # 2、按照小数点进行分割  1.98  [1,98] s.87  98.s1
   #3、正小数:小数点左边是整数 右边也是整数 .isdigits()
   #   负小数:小数点左边是以负号开头,但是只有一个负号,右边也是整数  -9.85
money = 500
def test(consume): # 500
   return money - consume
def test1(money):
   return test(money) + money
money = test1(money)
print(money)
不固定参数
def syz(a,*args):  #参数组
   print(a)
   username = args[0]
   pwd = args[1]
   age = args[2]
# syz('niuhanyang','2423',2323)
# syz('1s','sdf')
def syz2(time,**kwargs):  #关键字参数
   print(kwargs)
syz2('sdf')
syz2(name='nhy',age=38,time='20180912')
syz2('2018',name='nhy',age=38,addr='回龙观',home='河南')
syz2(time='xx',xx='xxx')
#1、必填参数还是非必填的
#2、它有没有限制参数个数
#3、它是把传过来的参数放到哪里
递归
def test1():
    num = int(input('please enter a number:'))
    if num%2==0:#判断输入的数字是不是偶数
       return True #如果是偶数的话,程序就退出了,返回true
    print('不是偶数请重新输入!')
    return test1()#如果不是偶数的话继续调用自己,输入值
# print(test1())#调用test
#少用递归,递归最多递归999,递归的效率不高。
i = 0
def test():
    global i
    i+=1
    print(i)
    test()
test()