21.8.18学习内容

昨日内容回顾

文件操作额外补充

"""
flush 指的是立即写入硬盘,相当于crtl+s
readable 文件是否可读\writeable文件是否可写
seek 控制光标移动,seek(offset,whence)
offset指的是控制位数,whence指的是操作模式.
 0:既可以用在文本模式也可以用在二进制模式(到文件开头)
 1:只可以在二进制模式下使用(当前位置)
 2:只可以在二进制模式下使用(文件末尾)
                
 with open(r'123.txt','r',encoding='utf8') as :f
     data=f.read
     print(data)
# 若果要移动光标位置
   f.seek(1,0)#移动到文件开头的位置,再往前移一个字符

如果是在末尾,可以用负数来表示前进

"""

函数基本使用

# 函数的基本语法结构
def 变量名(参数1,参数2):
     #添加注释
     函数体代码
   需要再加一个return返回值.
# 需要注意事项:
1.在使用函数之前一定要确保函数的存在,也就是要先写入函数再使用.
2.函数名要和变量名保持一致,要做到见名知意.
3.执行完函数需要给调用者一个反馈值 return.

-------------------------------------------------------------------------------

今日内容详细

函数定义与调用

定义阶段:
#函数在定义的阶段只检测函数体语法,不执行函数体代码.在定义过程中只要语法正确即可.
调用阶段:
#函数名加括号调用时才会加括号.
ps:函数体内部的代码外界是不能使用的.

函数的返回值

# 返回值就是执行完某个方法反馈出来的结果.可以通过给方法赋值得到返回值.
def data():
    print('from data')
res=data()
print(res)  # none
  # 当函数体没有return关键字的时候,默认返回none
def data():
    print('from data')
    return 123
res=data()
print(res)  #123
  # return后面关键字写什么就返回什么
  #如果return返回的值不指定类型,会默认转换成元组的形式.
  # 函数体代码遇到return立刻结束整个函数运行.

 

def data():
    name=input('输入你的姓名')
    return name # 返回name即输入的内容
name=data() #将输入的内容赋值给函数
print(name)# 这样就能打印出获取到的姓名

 

 

 

 

 

 

函数的类型

"""
1.无参数函数:函数不需要参数,在定义阶段就不需要参数,在调用时也不需要参数

def index():
    print('from index')
 index()
2.有参函数:  函数在定义阶段括号内填写了变量名,那么在调用时就必须给参数
def index(a):
    print('from index',a)
index(1561)
3.空函数:没有具体函数体代码.可以用pass代替 可以做到理清整体思路
def learn():
     pass# 补全语法无实际意义


"""

函数的参数

"""
函数参数分为实际参数和形式参数.
   在定义阶段的括号内写入的变量名叫做形式参数,简称形参.
   在调用阶段,括号内书写的值称之为函数的实际参数,实参.

函数的形参相当于变量名,函数的实参相当于变量值,两者在调用阶段时临时绑定,在运行结束后分开.
def index(age): # 形参
    print(age)
index(18) # 实参 age=18
"""
1.位置参数:按照先后顺序依次对应传值,不能多也不能少.
def index(x,y):  # 形参中有几个就必须要给几个实参.不然会报错!不能多也不能少
     print(x,y)
index(2,3)

2.关键字参数:可以通过实参直接赋值的方式 给形参传值,可以打破位置限制
  def index(x,y):
    print(x,y)
index(x=123,y=456)  
index(123,y=456)  # 默认短后长 位置参数一定要在关键字参数的前面
index(123,x=456)# 不能重复传值,并且y没有赋值

3.默认参数:函数在定义阶段就可以给参数进行赋值 没有给值就用形参中赋的值,给了就用给了的值
def data(name,age,gender='male'):
    print(name,age,gender)
data('max',18,'female')
data('max1',15,'male')
data('ma2x',17,)
data('max3',16,)

4.可变长参数:*号在形参中使用,会接受多余的位置参数,以元组的形式赋值给*号后面的变量名

def exam(a,*b):
    print(a,b)
exam(1,2,'a',5) # 1 (2, 'a', 5)

**形参中
会接受多余的关键字参数,组织成字典的格式,赋值给**后面的变量名.

def exam(a,**b):
    print(a,b)
exam(a=1,b=2,c='a',d=5)
# 位置参数给* 关键字参数给**
def func(*a, **b):
    print(a, b)
func(1, 2, 3, a=1, b=2, c=3)
func(1, 2, 3, 4, 5, 6, 7)
func(a=1, b=2, c=3)
# 但是要注意位置参数要在关键字前面
通常:
 针对形参中的可变长参数 变量名推荐使用
        *args  **kwargs
def login(*args, **kwargs):
    pass

利用函数对注册登录代码进行封装

# 选择注册或者登录功能

def register(): # 1.设置函数register该函数为注册功能
    print('注册功能')
def login(): # 2.设置函数login该函数为登录功能.
    print('登录功能')
dict={'1':register,'2':login} #3.设置一个字典,为下面代码取值所用
while True: # 4.添加循环给出选择注册或者登录,
    print('1.注册>>>'
          '2.登录>>>')
    choice=input('请输入关键字').strip() # 5.获取输入内容
    if choice in dict: # 6.做判断,如果输入内容在上面的字典中,1或者2 则执行
        name=dict.get(choice) # 7.通过键取值 取到的值1或者2作为赋值给name()函数
        name() # 8.执行函数
    else: # 9.如果不是1或者2 的处理方式
        print('输入错误请重新输入')

# 用函数进行封装之注册部分

def register(): # 1.设置函数register该函数为注册功能
    user_name=input('username>>>:').strip()
    pass_word=input('password>>>:').strip()
    with open(r'123.txt','r',encoding='utf8')as f: # 1.1 先打开文件读取内容校验账号是否注册过
        for line in f:   # 1.2 对文件f进行循环读取
           real_name = line.split('|')[0]  #1.3进行比对 并取值用户名 并以(|)的形式进行赋值
           if real_name == user_name:
               print('账户已存在')
               return  #1.4结束函数运行
    with open(r'123.txt','w',encoding='utf8')as f:  #1.5如果不存在就写入
           f.write('%s|%s\n'%(user_name,pass_word))  #1.6 写入内容进行定格
           print('%s注册成功'%user_name)

#用函数进行封装之登录部分

def login(): # 2.设置函数login该函数为登录功能.
    user_name=input('username>>>:').strip()
    pass_word=input('password>>>:').strip()
    with open(r'123.txt','r',encoding='utf8')as f: #2.1打开文件读取内容
        for line in f:
            real_name,real_password=line.split('|') #2.2对f进行循环取值 并做切割
        if real_name==user_name and real_password==pass_word.strip('\n' ):#2.3校验用户名和密码是否正确 并且写入时要换行
            print('登录成功')
            return #2.4结束函数运行 如果整个循环都没到这一步 可以直接打印 用户名或者密码错误无需else或者elif
    print('用户名或者密码错误')

内置函数

l = [11, 22, 33, 44, 55, 66, 77, 88, 99]
print(max(l))  
print(min(l))
print(sum(l))  # 分别是求最大值,求最小值,以及求和



l = ['jason', 'kevin', 'tony', 'jerry', 'tom'] count = 1
#for name in l:

print(count,name) # count += 1 #对名字进行编号排序

 

 

 

 

 

 

# format字符串格式化输出
 print('my name is {} and my age is {}'.format('jason',18))
print('my name is {0} {1} {1} and my age is {1} {0}'.format('jason',18))
 print('my name is {name} {name} {age} and my age is {age}'.format(name='jason',age=18))

 

 

# chr  查看ASCII码中数字对应的字符
print(chr(66))  # A     65-90
print(chr(120))  # z    97-122

 

 

 

 

posted @ 2021-08-19 00:02  查无此人cxc  阅读(41)  评论(0编辑  收藏  举报