day9-格式字符串和函数基础

总结

1.格式字符串
  • 格式化字符串: 格式占位符

    1. 语法: 包含格式占位符的字符串 % (数据1, 数据2, 数据3, …)
    2. 说明: 括号中数据的个数需要和格式占位符的个数保持一致
  • 格式占位符

    1. %s - 字符串(任何类型的数据); %s可以使用任何意义类型的数据填充(如果只有一个数据,()可以省略)
    2. %d - 整数
    3. %f - 浮点数; %.Nf - 保留N位小数
    name = '囧囧'
    age = 21
    message = name + '今年' + str(age) + '岁'
    print(message)
    
    message = '%s今年%d岁' % (name, age)
    message = '名字:%s' % ['张三', '李四']
    print(message)  # 名字:['张三', '李四']
    
    message = '月薪:%.2f' % 13001.5781
    print(message)  # 月薪:13001.58
    
  • 格式化字符串: f-string(字符串.format())

    f’包含{}的字符集’

    message = f'{name}今年{age}岁'
    print(message)
    message = f'a:{100 + 200}, b:{10 * 20}'
    print(message)  # a:300, b:200
    
    1. {表达式:.Nf} - 空值保留N位小数
    message = f'a:{1.234:.2f}'
    print(message)  # a:1.23
    
    1. {表达式:,}
    money = 1020001201
    message = f'金额:{money:,}'
    print(message)  # 金额:1,020,001,201
    money = 10000000.1421
    message = f'金额:{money:,.2f}'
    print(message)  # 金额:10,000,000.14
    
    1. {表达式:.N%}
    num = 0.56
    message = f'毛利率:{num:.2%}'
    print(message)  # 毛利率:56.00%
    
2. 函数基础
  • 什么是函数

    函数就是实现某一特定功能的代码的封装

  • 函数的分类(根据函数是由谁创造(定义)的来分类的)

    1. 系统函数(别人造好的机器) - python自带的函数, 程序员只需要在需要的时候调用
    2. 自定义函数(自己造机器) - 由程序员自己创造(定义)的函数
  • 定义函数(自己造机器)

    语法:

    def 函数名(形参列表):

    ​ 函数说明文档

    ​ 函数体

    说明:

    def - 关键字, 固定写法

    函数名 - 程序员自己命名

    ​ 要求: 是标识符, 不能是关键字

    ​ 关键字: 见名知义(看到函数名大概直到函数的功能), 字母都小写, 多个单词用下划线隔开, 不使用系统名字

    (): - 固定写法

    形参列表 - 以’变量名1, '变量名2, 变量名3, …'的形式存在,变量也可以一个都没有.(这儿的一个变量就是一个形参)

    ​ 形参的作用: 将函数外部的数据传递到函数内部

    ​ 一个函数需不要需要形参, 需要几个形参, 就看实现函数的功能需不需要额外的数据, 需要及格额外的数据

    函数说明文档 - 本质就是文档注释(相当于机器的说明书)

    函数体 - 和def保持一个缩进的一条或者多条语句

    ​ 函数体就是实现函数功能的代码段

    初学者定义的步骤:

    第一步: 确定函数功能
    第二步: 根据函数功能确定函数名
    第三步: 确定形参(看实现这个函数的功能需不需要额外的数据,需要几个额外的数据)
    第四步: 实现函数功能(写函数体)
    第五步: 写函数说明文档

    练习1: 写一个函数, 其功能是求任意两个数的和

    def sum2(num1, num2):
        """
        求两个数的和(功能说明)
        :param num1: int或者float, 第一个数(参数说明)
        :param num2: 第二个数
        :return: None(返回值)
        """
        print(num1 + num2)
    

    练习2: 写一个函数提取指定字符串中中文的个数

    def get_chinese(str1):
        """
        提取字符串中中文
        :param str1: 被提取的字符串
        :return: None
        """
        print(''.join(x for x in str1 if '\u4e00' <= x <= '\u9fa5'))
    

    练习3: 写一个函数将列表中的元素逆序

    def reverse_list(list1):
        """
        将列表中的元素逆序
        :param list1: 被逆序的列表
        :return: None
        """
        print(list1[::-1])
    

    练习4: 写一个函数判断指定的数是否是水仙花数.(三位数各个位上的数的立方和等于它本身)

    def is_daffodil_num(num):
        """
        判断一个数是否是水仙花数
        :param num: 被判断的数
        :return: None
        """
        num_str = str(num)
        if len(num_str) != 3:
            print(False)
        else:
            sum1 = 0
            for x in num_str:
                sum1 += int(x)**3
            if sum1 == num:
                print(True)
            else:
                print(False)
    
  • 调用函数(使用机器)

    特别重要的结论: 定义函数的时候不会执行函数体,调用函数才会执行函数体

    同一个函数可以多次调用

    语法:

    函数名(实参列表)

    说明:

    函数名 - 必须是已经定义过的函数的函数名

    () - 固定写法

    实参列表 - 以’数据1, 数据2, 数据3, …'的形式存在, 这儿的每个数据就是一个实参,实参是用来给形参赋值的

  • 函数调用过程

    第一步: 回到函数定义的位置

    第二步: 传参(用实参给形参赋值, 传参的时候必须保证每个参数都由值)

    第三步: 执行函数体

    第四步: 确定函数返回值

    第五步: 回到函数调用的位置, 接着往后执行

作业

  1. 编写一个函数,交换指定字典的key和value。 例如:dict1={‘a’:1, ‘b’:2, ‘c’:3}–> dict1={1:‘a’, 2:‘b’, 3:‘c’}

    def change_key_value(dict1):
        """
        交换字典的key和value
        :param dict1: 被交换key和value的字典
        :return:None
        """
        print({dict1[x]: x for x in dict1})
    
  2. 编写一个函数,提取指定字符串中所有的字母,然后拼接在一起产生一个新的字符串.例如: 传入’12a&bc12d-+’ --> ‘abcd’

    def get_letter(str1):
        """
        提取字符串中所有的字母
        :param str1: 被提取的字符串
        :return: None
        """
        print(''.join(x for x in str1 if 'a' <= x <= 'z' or 'A' <= x <= 'Z'))
    
  3. 写一个自己的capitalize函数,能够将指定字符串的首字母变成大写字母.例如: ‘abc’ -> ‘Abc’ ‘12asd’ --> ‘12asd’

    def first_capital(str1):
        """
        将字符串的首字母变成大写字母
        :param str1:首字母被变成大写字母的字符串
        :return:None
        """
        print(chr(ord(str1[0]) - 32) + str1[1:])
    
  4. 写一个自己的endswith函数,判断一个字符串是否已指定的字符串结束.

    例如: 字符串1:‘abc231ab’ 字符串2:‘ab’ 函数结果为: True

    ​ 字符串1:‘abc231ab’ 字符串2:‘ab1’ 函数结果为: False

    def str_end(str1, str2):
        """
        判断一个字符串是否已指定的字符串结束
        :param str1:被判断是否指定的字符串结束
        :param str2:指定的结尾的字符串
        :return:None
        """
        if len(str1.split(str2)[-1]) == 0:
            print(True)
        else:
            print(False)
    
  5. 写一个自己的isdigit函数,判断一个字符串是否是纯数字字符串.

    例如: ‘1234921’ 结果: True

    ​ ‘23函数’ 结果: False

    ​ ‘a2390’ 结果: False

    def only_num(str1):
        """
        判断一个字符串是否是纯数字字符串
        :param str1:被判断的字符串
        :return:None
        """
        for x in str1:
            if '0' <= x <= '9':
                pass
            else:
                print(False)
                break
        else:
            print(True)
    
  6. 写一个自己的upper函数,将一个字符串中所有的小写字母变成大写字母.

    例如: ‘abH23好rp1’ 结果: ‘ABH23好RP1’

    def new_upper(str1):
        """
        将字符串中所有的小写字母变成大写字母
        :param str1:被改变的字符串
        :return:None
        """
        print(''.join(chr(ord(x) - 32) if x.islower() else x for x in str1))
    
  7. 写一个自己的rjust函数,创建一个字符串的长度是指定长度,原字符串在新字符串中右对齐,剩下的部分用指定的字符填充

    例如: 原字符:‘abc’ 宽度: 7 字符:’^’ 结果: ‘^^^^abc’

    ​ 原字符:‘你好吗’ 宽度: 5 字符:‘0’ 结果: ‘00你好吗’

    def new_just(str1, num, str2):
        """
        字符串向由对齐,剩下部分用指定的字符填充
        :param str1:原字符串
        :param num:指定长度
        :param str2:填充字符
        :return:None
        """
        str3 = ''
        for x in range(num - len(str1)):
            str3 += str2
        print(str3 + str1)
    
  8. 写一个自己的index函数,统计指定列表中指定元素的所有下标,如果列表中没有指定元素返回-1.

    ​ 例如: 列表: [1, 2, 45, ‘abc’, 1, ‘你好’, 1, 0] 元素: 1 结果: 0,4,6
    ​ 列表: [‘赵云’, ‘郭嘉’, ‘诸葛亮’, ‘曹操’, ‘赵云’, ‘孙权’] 元素: ‘赵云’ 结果: 0,4
    ​ 列表: [‘赵云’, ‘郭嘉’, ‘诸葛亮’, ‘曹操’, ‘赵云’, ‘孙权’] 元素: ‘关羽’ 结果: -1

  9. 写一个自己的len函数,统计指定序列中元素的个数

    例如: 序列:[1, 3, 5, 6] 结果: 4
    序列:(1, 34, ‘a’, 45, ‘bbb’) 结果: 5
    序列:‘hello w’ 结果: 7

    def new_len(list1):
        """
        统计序列中元素的个数
        :param sep1:被统计的序列
        :return:None
        """
        conut = 0
        for x in list1:
            conut += 1
        print(conut)
    
  10. 写一个自己的max函数,获取指定序列中元素的最大值。如果序列是字典,取字典值的最大值

    例如: 序列:[-7, -12, -1, -9] 结果: -1
    序列:‘abcdpzasdz’ 结果: ‘z’
    序列:{‘小明’:90, ‘张三’: 76, ‘路飞’:30, ‘小花’: 98} 结果: 98

    def new_max(list1):
        """
        求最大值
        :param list1:获取最大值的列表
        :return:None
        """
        max1 = list1[0]
        for x in list1[1:]:
            if x > max1:
                max1 = x
                print(max1)
    
  11. 写一个函数实现自己in操作,判断指定序列中,指定的元素是否存在

    例如: 序列: (12, 90, ‘abc’) 元素: ‘90’ 结果: False
    序列: [12, 90, ‘abc’] 元素: 90 结果: True

    def new_in(seq, ele):
        """
        判断指定的元素是否存在
        :param list1:被判断的序列
        :param ele:被判断的元素
        :return:None
        """
        for x in seq1:
            if x == ele:
                print(True)
                break
        else:
            print(False)
    
  12. 写一个自己的replace函数,将指定字符串中指定的旧字符串转换成指定的新字符串

    例如: 原字符串: ‘how are you? and you?’ 旧字符串: ‘you’ 新字符串:‘me’ 结果: ‘how are me? and me?’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值