s21day09 python笔记

一、三元运算(三目运算)

  1. 用途:用于简单的if条件语句
  2. 基本结构
v = 前面 if 条件 else 后面
#如果条件为真,v = 前面,否则,v = 后面

"""
相当于
if 条件:
    v = 前面
else:
    v = 后面
"""
# 让用户输入值,如果值是整数,则转换成整数,否则赋值为None
data = input('>>>') value =  int(data) if data.isdecimal() else None 
  1. 注意:现阶段先不要直接使用三元运算,先做出来,再思考如何简化

二、函数

2.1 函数的本质及应用场景

截至目前:面向过程编程(可读性差/可重用性差)

对于函数编程:

  1. 本质:将N行代码拿到别处并给他起一个名字,以后通过名字就可以找到这段代码并执行
  2. 应用场景:
    • 代码重复执行
    • 代码特别多超过一屏,可以选择通过函数进行代码的分割
# 面向过程编程 
user_input = input('请输入角色:')

if user_input == '管理员':    
    import smtplib    
    from email.mime.text import MIMEText    
    from email.utils import formataddr
    msg = MIMEText('管理员,我想演男一号,你想怎么着都行。', 'plain', 'utf-8')    
    msg['From'] = formataddr(["李邵奇", '15776556369@163.com'])    
    msg['To'] = formataddr(["管理员", '344522251@qq.com'])    
    msg['Subject'] = "亲爱的管理员"
    
    server = smtplib.SMTP("smtp.163.com", 25)           
    server.login("15776556369@163.com", "qq1105400511")          
    server.sendmail('15776556369@163.com', ['管理员', ], msg.as_string())
    server.quit() 
    
elif user_input == '业务员':    
    import smtplib    
    from email.mime.text import MIMEText    
    from email.utils import formataddr
    msg = MIMEText('业务员,我想演男一号,你想怎么着都行。', 'plain', 'utf-8')    
    msg['From'] = formataddr(["李邵奇", '15776556369@163.com'])    
    msg['To'] = formataddr(["业务员", '业务员'])    
    msg['Subject'] = "亲爱的业务员"
    
    server = smtplib.SMTP("smtp.163.com", 25)    
    server.login("15776556369@163.com", "qq1105400511")   
    server.sendmail('15776556369@163.com', ['业务员', ], msg.as_string())    
    server.quit() 
    
elif user_input == '老板':    
    import smtplib    
    from email.mime.text import MIMEText    
    from email.utils import formataddr
    
    msg = MIMEText('老板,我想演男一号,你想怎么着都行。', 'plain', 'utf-8')    
    msg['From'] = formataddr(["李邵奇", '15776556369@163.com'])    
    msg['To'] = formataddr(["老板", '老板邮箱'])    
    msg['Subject'] = "亲爱的老板"
    
    server = smtplib.SMTP("smtp.163.com", 25)    
    server.login("15776556369@163.com", "qq1105400511")    
    server.sendmail('15776556369@163.com', ['老板邮箱', ], msg.as_string())    
    server.quit()
#函数式编程
#先不考虑是否能执行,单纯为了比较函数式编程与面向过程编程的区别
def send_email():    
    import smtplib    
    from email.mime.text import MIMEText    
    from email.utils import formataddr
    
    msg = MIMEText('老板,我想演男一号,你想怎么着都行。', 'plain', 'utf-8')    
    msg['From'] = formataddr(["李邵奇", '15776556369@163.com'])    
    msg['To'] = formataddr(["老板", '老板邮箱'])    
    msg['Subject'] = "情爱的老板"
    
    server = smtplib.SMTP("smtp.163.com", 25)    
    server.login("15776556369@163.com", "qq1105400511")    
    server.sendmail('15776556369@163.com', ['老板邮箱', ], msg.as_string())
    server.quit()

user_input = input('请输入角色:')
if user_input == '管理员':    
    send_email() 
elif user_input == '业务员':    
    send_email() 
elif user_input == '老板':    
    send_email()

2.2 函数定义

  1. 基本定义函数
def 函数名():       #函数的定义
    代码            #函数内容
    
函数名()            #函数的执行
"""
注意:1.函数如果不被调用,则内部代码永远不会被执行
     2.len(计算长度)是python内部写好的一个函数
"""
  1. 参数(个数不限制)
def get_list_date(aaa):       #aaa:形式参数(形参)
    v = [11,22,33,44]
    print(v[aaa])
    
get_list_date(1)             #1:实际参数(实参)
  • 发送邮件问题

    # 假如:管理员/业务员/老板用的是同一个邮箱。 
    """
    def send_email(to):    
        import smtplib    
        from email.mime.text import MIMEText    
        from email.utils import formataddr
    
        msg = MIMEText('导演,我想演男一号,你想怎么着都行。', 'plain', 'utf-8')    
        msg['From'] = formataddr(["李邵奇", '15776556369@163.com'])    
        msg['To'] = formataddr(["导演", to])    
        msg['Subject'] = "情爱的导演"
    
        server = smtplib.SMTP("smtp.163.com", 25)    
        server.login("15776556369@163.com", "qq1105400511")  
        server.sendmail('15776556369@163.com', [to, ], msg.as_string())    
        server.quit() 
    """ 
    
    def send_email(to):    
        template = "要给%s发送邮件" %(to,)    
        print(template)
    
    user_input = input('请输入角色:')
    if user_input == '管理员':    
        send_email('xxxx@qq.com') 
    elif user_input == '业务员':    
        send_email('xxxxo@qq.com') 
    elif user_input == '老板':    
        send_email('xoxox@qq.com')
  • 练习题

    # 1. 请写一个函数,函数计算列表 info = [11,22,33,44,55] 中所有元素的和。
    def get_sum():
        info = [11,22,33,44,55]
        data = 0
        for item in info:
            data += item
        print(data)
    
    get_sum()
    
    # 2. 请写一个函数,函数计算列表中所有元素的和。
    def get_list_sum(a1):
          data = 0
        for item in a1:
            data += item
          print(data)
    
    get_list_sum([11,22,33])
    get_list_sum([99,77,66])
    v1 = [8712,123,123]
    get_list_sum(v1)
    
    # 3. 请写一个函数,函数将两个列表拼接起来。
    def join_list(a1,a2):
        result = []
        result.extend(a1)
        result.extend(a2)
        print(result)
    
    join_list([11,22,33],[55,66,77]
    
    # 4. 计算一个列表的长度
    def my_len(arg):
      count = 0
      for item in arg:
              count += 1
      print(count)
    
    v = [11,22,33]
    my_len(v)
    len(v)
    
    # 5. 发邮件的示例        
    def send_email(role,to):
        template = "要给%s%s发送邮件" %(role,to,)
        print(template)
    
    user_input = input('请输入角色:')
    if user_input == '管理员':
        send_email('管理员','xxxx@qq.com')
    elif user_input == '业务员':
        send_email('业务员','xxxxo@qq.com')
    elif user_input == '老板':
        send_email('老板','xoxox@qq.com')
  1. 返回值(return)
def func(arg):
    代码             #函数内容
return 9             #返回值为9,默认:return None

val = func('ads')    #设置一个变量接收返回值
  • 练习题

    # 1. 写函数,计算一个列表中有多少个数字,打印: 列表中有%s个数字。
    #    提示:type('x') == int 判断是否是数字。
    # 方式一:
    def get_list_counter1(data_list):
        count = 0
        for item in data_list:
            if type(item) == int:
                count += 1
      msg = "列表中有%s个数字" %(count,)
        print(msg)
    
    get_list_counter1([1,22,3,'alex',8])
    
    # 方式二:
    def get_list_counter2(data_list):
        count = 0
        for item in data_list:
            if type(item) == int:
                count += 1
      return count
    
    v = get_list_counter1([1,22,3,'alex',8])
    msg = "列表中有%s个数字" %(v,)
    print(msg)
    
    # 2. 写函数,计算一个列表中偶数索引位置的数据构造成另外一个列表,并返回。
    # 方式一:
    def get_data_list1(arg):
        v = arg[::2]
        return v
    
    data = get_data_list1([11,22,33,44,55,66])
    
    # 方式二:
    def get_data_list2(arg):
        v = []
        for i in range(0,len(arg)):
          if i % 2 == 0:
              v.append(arg[i])
          return v
    
    data = get_data_list2([11,22,33,44,55,66])
    
    # 3. 读取文件,将文件的内容构造成指定格式的数据,并返回。
    """
    a.log文件
        alex|123|18
        eric|uiuf|19
        ...
    目标结构:
    a.  ["alex|123|18","eric|uiuf|19"] 并返回。
    b. [['alex','123','18'],['eric','uiuf','19']]
    c. [
      {'name':'alex','pwd':'123','age':'18'},
      {'name':'eric','pwd':'uiuf','age':'19'},
     ]
    """
    def a():
        info = []
        with open('a.log',mode='r',encoding='utf-8') as f:
            for line in f:
                line = line.strip()
                info.append(line)
        return info
    
    def b():
        info = []
        with open('a.log',mode='r',encoding='utf-8') as f:
            for line in f:
                line = line.strip()
                v = line.split('|')
                info.append(v)
        return info
    
    def c():
        info = []
        with open('a.log',mode='r',encoding='utf-8') as f:
            for line in f:
                line = line.strip()
                list = line.split('|')
                v = {}
                v['name'] = list[0]
                v['pwd'] = list[1]
                v['age'] = list[2]
                info.append(v)
        return info
    
    date1 = a()
    date2 = b()
    date3 = c()
    print(date1,date2,date3)
  1. 总结
#函数的基本结构:
#情况一
def f1():
    函数内容
    
f1()

#情况二
def f2(a):
    函数内容
    
f2(1)

#情况三
def f3():
    函数内容
    return 1

v1 = f3()

#情况四
def f4(a1,a2):
    函数内容
    return a1+a2

v2 = f4(1,7)
内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!