day10-函数基础作业

本文介绍了如何使用Python编写函数来实现一些常见的字符串和列表操作,包括创建自定义maketrans函数生成字符映射字典,实现join功能连接序列元素,检查字符串是否全为大写,清空列表,逆序列表,替换子串,获取整数的十位数,计算集合交集,以及自定义字典的update方法。这些函数覆盖了基础的字符串处理和数据结构操作。
  1. 写一个函数,实现maketrans的功能,将两个字符串转换成一个字典,第一个字符串中的字符是键,第二个字符串中的字符是值

    第一个字符串: ‘abcmn’ 第二个字符串:‘一二三四五’

    结果:{‘a’: ‘一’, ‘b’: ‘二’, ‘c’: ‘三’, ‘m’: ‘四’, ‘n’: ‘五’}

    def to_dict(str1, str2):
        dict1 = {}
        for x in range(len(str1)):
            dict1[str1[x]] = str2[x]
        return dict1
    
    str1 = 'abcmn'
    str2 = '一二三四五'
    result = to_dict(str1, str2)
    print(result)
    
  2. 写一个属于自己的join函数,可以将任意序列中的元素以指定的字符串连接成一个新的字符串

    序列: [10, 20, 30, ‘abc’] 字符串: ‘+’ 结果:‘10+20+30+abc’

    序列: ‘abc’ 字符串: ‘–’ 结果:‘a–b--c’

    注意:序列中的元素可以不是字符串哟

    def my_join(list1, str1): # list改seq
        str2 = ''
        count = len(list1)
        for x in list1:
            str2 += str(x)
            count -= 1
            if count > 0:
                str2 += str1
        return str2
    
    
    list1 = [10, 20, 30, 'abc']
    str1 = '+'
    result = my_join(list1, str1)
    print(result)
    
    list1 = 'abc'
    str1 = '--'
    result = my_join(list1, str1)
    print(result)
    
  3. 写一个输入自己的upper函数,判断指定字符串是否是纯大写字母字符串🔸

    ‘AMNDS’ -> True

    ‘amsKS’ -> False

    ‘123asd’ -> False

    def is_all_upper(str1):
        for x in str1:
            if not 'A' <= x <= 'Z':
                print(False)
                break
        else:
            print(True)
    
    # 方法2
    def is_all_upper(str1):
        for x in str1:
            if not 'A' <= x <= 'Z':
                return False
    	return Ture		
    
    str1 = input('请输入:')
    is_all_upper(str1)
    
  4. 写一个clear函数,清空指定列表。

    注意:功能是将原列表清空,不产生新的列表

    def total_clear(list1):
        for x in list1[:]:	# 这里要复制,不然删除元素后,其他元素位置改变,下次x取值会跳过删除的元素后面一位元素🟠
            list1.remove(x)
        return list1		# 这行删掉,没有产生新的数据
    
    
    list2 = ['d', 3, 'af', 8]
    total_clear(list2)
    print(list2)		 # [3, 8]
    
    # 方法2
    def total_clear(list1):
        for x in range(len(list1)):
            del list1[0]			# 每删一个元素个数减1,这里只能用下标0,一直删第一个
        return list1
    
    
    list2 = ['d', 3, 'af', 8]
    print(total_clear(list2))
    
  5. 写一个reverse函数,将列表中的元素逆序

    两种方法:1.产生一个新的列表 2.不产生新的列表,直接修改原列表元素的顺序

    def get_reverse(list1):
        for x in range(len(list1) // 2):
            list1[x], list1[len(list1) - 1 - x] = list1[len(list1) - 1 - x], list1[x]
        return list1	# 没有新数据,不用返回
    
    
    list2 = ['d', 3, 'af', 8]
    get_reverse(list2)
    print(list2)
    
    # 其他方法
    # 方法一:
    def get_reverse(list1):
        return list1[::-1]
    
    
    list2 = ['d', 3, 'af', 8]
    result = get_reverse(list2)
    print(result)
    
    
    # 方法二:
    def get_reverse1(list1):
        for index in range(len(list1)):
            list1.insert(index, list1.pop())
    
    list2 = ['d', 3, 'af', 8]
    get_reverse1(list2)
    print(list2)
    
  6. 写一个replace函数,将字符串中指定的子串替换成新的子串🔸

    原字符串: ‘abc123abc哈哈哈uui123’ 旧子串: ‘123’ 新子串: ‘AB’

    结果: ‘abcABabc哈哈哈uuiAB’

    # 第二个替换不掉
    def get_replace(str1, str2, str3):
        new_str = ''
        for index in range(len(str1)):
            if not str1.find(str2) == index:
                if index in range(str1.find(str2), str1.find(str2) + len(str2)):
                    continue
                new_str += str1[index]
            else:
                new_str += str3
        return new_str
    
    
    str1 = 'abc123abc哈哈哈uui123'
    str2 = '123'
    str3 = 'AB'
    result = get_replace(str1, str2, str3)
    print(result)
    
    # 切片获取
    def replace_str(str1, str2, str3):
        length = len(str1)
        length1 = len(str2)
        for x in range(length):
            if str1[x:length1 + x] == str2:
                str1 = str1[:x] + str3 + str1[length1 + x:]
        return str1
    
    
    print(replace_str('abc123abc哈哈哈uui123', '123', 'AB'))
    
  7. 写一个函数,可以获取任意整数的十位数

    123 -> 2

    82339 -> 3

    9 -> 0

    -234 -> 3

    def get_ten(num):
        if int(num) > 0:
            print(int(num) // 10 % 10)
        else:
            print(int(num) * -1 // 10 % 10)
    
    
    num = input('请输入任意整数:')
    get_ten(num)
    
    # 正确
    def get_tens_digit(num):
        if num < 0:
            num *= -1
        return num // 10 % 10
    
    
    print(get_tens_digit(89))
    print(get_tens_digit(-2389))
    
  8. 写一个函数实现数学集合运算符 & 的功能,求两个集合的公共部分:

    集合1: {1, 2, 3} 集合2: {6, 7, 3, 9, 1}

    结果:{1, 3}

    def get_intersection(set1, set2):
        new_set = set()
        for x in set1:
            if x in set2:
                new_set.add(x)
        return new_set
    
    set1, set2 = {1, 2, 3}, {6, 7, 3, 9, 1}
    print(get_intersection(set1, set2))
    
  9. 写一个函数实现属于自己的字典update方法的功能,将一个字典中的键值对全部添加到另外一个字典中

    字典1: {‘a’: 10, ‘b’: 20} 字典2: {‘name’: ‘张三’, ‘age’: 18} -> 结果让字典1变成: {‘a’: 10, ‘b’: 20, name’: ‘张三’, ‘age’: 18}

    字典1: {‘a’: 10, ‘b’: 20} 字典2:{‘a’: 100, ‘c’: 200} -> 结果让字典1变成: {‘a’: 10, ‘b’: 20, ‘c’: 200}

    def get_update(d1, d2):
        for key, value in d2.items():
            if key not in d1:
                d1[key] = value
        return d1
    
    # 用setdefault
    
    d1, d2 = {'a': 10, 'b': 20}, {'a': 100,  'c': 200}
    get_update(d1, d2)
    print(d1)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值