python_day10_homework

1. 编写函数,求1 + 2 + 3 +…N的和


def q_sum(n: int):
    """
输出:输入的N,N到1的和(1 + 2 + 3 +…N)
    """
    num_tmp = 0
    for num in range(1, n+1):
        num_tmp += num
    return num_tmp


print('1.求1 + 2 + 3 +…N的和:', q_sum(4))  # 1.求1 + 2 + 3 +…N的和: 10


2.编写一个函数,求多个数中的最大值

def q_max(*args, **kwargs):
    """
    输出序列的最大值
    """
    sum_tmp = 0
    for num in args:
        if num >= sum_tmp:
            sum_tmp = num
    for key in kwargs:
        if kwargs[key] >= sum_tmp:
            sum_tmp = kwargs[key]
    return sum_tmp


print('2.多个数中的最大值:', q_max(1, 2, 3, 4, a=1, b=3, c=5))  # 2.多个数中的最大值: 5

3.编写一个函数,实现摇骰子的功能,打印N个骰子的点数和

def q_random(n: int):
    """
模拟摇骰子:输出N颗骰子的和
    """
    import random
    sum_tpm = 0
    for _ in range(n):
        sum_tpm += random.randint(1, 7)
    return sum_tpm


print('3.打印%d个骰子的点数和:%d' % (6, q_random(6)))    # 3.打印6个骰子的点数和:19

4.编写一个函数,交换指定字典的key和value。

  • 例如: dict1 = {'a': 1, 'b': 2, 'c': 3} --> dict1 = {1: 'a', 2: 'b', 3: 'c'}
def q_swap_dict(dict1: dict):
    """
交换dict的value和key:dict的值需要满足key的要求
    """
    dict_tmp = {}
    for key in dict1:
        dict_tmp[dict1[key]] = key
    return dict_tmp


dict2 = {'a': 1, 'b': 2, 'c': 3}
dict2 = q_swap_dict(dict2)
print(dict2)            # {1: 'a', 2: 'b', 3: 'c'}

5.编写一个函数,提取指定字符串中所有的字母,然后拼接在一起产生一个新的字符串

  • 例如: 传入 '12a&bc12d-+' --> 'abcd'
def q_draw_letter(str1: str):
    """
提取str中的字母
    """
    str_tmp = ''
    for letter in str1:
        if 'a' <= letter <= 'z' or 'A' <= letter <= 'Z':
            str_tmp += letter
    return str_tmp


print(q_draw_letter('12a&bc12d-+'))  # abcd

6. 写一个函数,求多个数的平均值

def q_average(*args, **kwargs):
    """
    求多个数的平均值
    """
    count_tmp = 0
    sum_tmp = 0
    for num in args:
        sum_tmp += num
        count_tmp += 1
    for key in kwargs:
        sum_tmp += kwargs[key]
        count_tmp += 1
    return sum_tmp / count_tmp


print(q_average(1, 2, 3, 4, a=5, b=6))  # 3.5

7. 写一个函数,默认求10的阶乘,也可以求其他数字的阶乘

def q_factorial(num=10):
    """
 求num的阶乘(默认输出10!)
    """
    factorial = 1
    for num1 in range(1, num+1):
        factorial *= num1
    return factorial


print(q_factorial())    # 3628800
print(q_factorial(4))   # 24

注意:以下方法不能使用系统提供的方法和函数,全部自己写逻辑


8.写一个自己的capitalize函数,能够将指定字符串的首字母变成大写字母

  • 例如: 'abc' -> 'Abc' '12asd' --> '12asd'
def q_capitalize(str1: str):
    """
str首字母大写
    """
    if 'a' <= str1[0] <= 'z':
        return chr(ord(str1[0])-32) + str1[1:]
    return str1

print(q_capitalize('abc'))      # Abc
print('===', q_capitalize('12asd'))  # 12asd

9. 写一个自己的endswith函数,判断一个字符串是否已指定的字符串结束

  • 例如: 字符串1:'abc231ab'
  • 字符串2: 'ab'
  • 函数结果为: True
  • 字符串1: 'abc231ab'
  • 字符串2: 'ab1'
  • 函数结果为: False
def q_endswith (str1: str, str2: str):
    """
判断str1中是否包含str2
    """
    len_tmp = 0
    for _ in str2:
        len_tmp += 1
    if str1[-len_tmp:] == str2:
        return True
    else:
        return False


print(q_endswith('abc231ab', 'ab'))     # True
print(q_endswith('abc231ab', 'ab1'))     # False

10.写一个自己的isdigit函数,判断一个字符串是否是纯数字字符串

  • 例如: '1234921'
  • 结果: True
  • '23函数'
  • 结果: False
  • 'a2390'
  • 结果: False
def q_isdigit(str1:str):
    """
判断一个字符串是否是纯数字字符串
    """
    flag = True
    for element in str1:
        if '0' <= element <= '9':
                pass
        else:
            flag = False
    return flag


print(q_isdigit('1234921'))  # True
print(q_isdigit('23函数'))  # False

11.写一个自己的upper函数,将一个字符串中所有的小写字母变成大写字母

  • 例如: 'abH23好rp1'
  • 结果: 'ABH23好RP1'
def q_upper(str1: str):
    """
将一个字符串中所有的小写字母变成大写字母
    """
    str_tmp = ''
    for char in str1:
        if 'a' <= char <= 'z':
            str_tmp += chr(ord(char)-32)
        else:
            str_tmp += char
    return str_tmp


print(q_upper('abH23好rp1'))      # ABH23好RP1

12.写一个自己的rjust函数,创建一个字符串的长度是指定长度,原字符串在新字符串中右对齐,剩下的部分用指定的字符填充

  • 例如: 原字符:'abc'
  • 宽度: 7
  • 字符: '^'
  • 结果: '^^^^abc'
  • 原字符: '你好吗'
  • 宽度: 5
  • 字符: '0'
  • 结果: '00你好吗'
def q_rjust(str1: str, char: str, width: int):
    """
    按指定宽度和指定的字符填充字符串
    :param str1: 字符串
    :param char: 字符
    :param width: 宽度
    :return: 填充后的字符串
    """
    len_tmp = 0
    for _ in str1:
        len_tmp +=1
    return char * (width - len_tmp) + str1


print(q_rjust('abc', '^', 7))      # ^^^^abc
print(q_rjust('你好吗', '0', 5))      # 00你好吗

13.写一个自己的index函数,统计指定列表中指定元素的所有下标,如果列表中没有指定元素返回 - 1

  • 例如: 列表: [1, 2, 45, 'abc', 1, '你好', 1, 0]
  • 元素: 1
  • 结果: 0, 4, 6
  • 列表: ['赵云', '郭嘉', '诸葛亮', '曹操', '赵云', '孙权']
  • 元素: '赵云'
  • 结果: 0, 4
  • 列表: ['赵云', '郭嘉', '诸葛亮', '曹操', '赵云', '孙权']
  • 元素: '关羽'
  • 结果: -1
def q_index(element, list1: list):
    """
查找元素在序列中的位置,返回下标,没有返回-1
    :param element: 元素
    :param list1: 序列
    :return: 下标 没有返回-1
    """
    result = []
    count_tmp = -1
    for element_tmp in list1:
        count_tmp += 1
        if element == element_tmp:
            result.append(count_tmp)
    len_tmp = 0
    for _ in result:
        len_tmp += 1
    if len_tmp == 0:
        return -1
    else:
        return tuple(result)


print(q_index(1, [1, 2, 45, 'abc', 1, '你好', 1, 0]))     # (0, 4, 6)
print(q_index('赵云', ['赵云', '郭嘉', '诸葛亮', '曹操', '赵云', '孙权']))     # (0, 4)
print(q_index('关羽', ['赵云', '郭嘉', '诸葛亮', '曹操', '赵云', '孙权']))     # -1

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

  • 例如: 序列:[1, 3, 5, 6]
  • 结果: 4
  • 序列: (1, 34, 'a', 45, 'bbb')
  • 结果: 5
  • 序列: 'hello w'
  • 结果: 7
def q_len(x):
    """
指定序列中元素的个数
    """
    len_tmp = 0
    for _ in x:
        len_tmp += 1
    return len_tmp


print(q_len([1, 3, 5, 6]))      # 4
print(q_len((1, 34, 'a', 45, 'bbb')))       # 5
print(q_len('hello w'))     # 7

15.写一个自己的max函数,获取指定序列中元素的最大值。如果序列是字典,取字典值的最大值

  • 例如: 序列:[-7, -12, -1, -9]
  • 结果: -1
  • 序列: 'abcdpzasdz'
  • 结果: 'z'
  • 序列: {'小明': 90, '张三': 76, '路飞': 30, '小花': 98}
  • 结果: 98
def q_max(x):
    """
获取指定序列中元素的最大值。如果序列是字典,取字典值的最大值
    """
    max_tmp = 0
    if isinstance(x, dict):
        for key in x:
            max_tmp = x[key]
            break
        for key in x:
            if x[key] >= max_tmp:
                max_tmp = x[key]
        return max_tmp
    else:
        max_tmp = x[0]
        for num in x:
            if num >= max_tmp:
                max_tmp = num
        return max_tmp


print(q_max([-7, -12, -1, -9]))     # -1
print(q_max('abcdpzasdz'))      # z
print(q_max({'小明': 90, '张三': 76, '路飞': 30, '小花': 98}))      # 98

16.写一个函数实现自己in操作,判断指定序列中,指定的元素是否存在

  • 例如: 序列: (12, 90, 'abc')
  • 元素: '90'
  • 结果: False
  • 序列: [12, 90, 'abc']
  • 元素: 90
  • 结果: True
def q_in(a, b):
    """
指定序列中(b)中指定的元素(a)是否存在
    """
    for element in b:
        if element == a:
            return True
    else:
        return False


print(q_in('90', (12, 90, 'abc')))  # False
print(q_in(90, [12, 90, 'abc']))  # True

17.写一个自己的replace函数,将指定字符串中指定的旧字符串转换成指定的新字符串

  • 例如: 原字符串: 'how are you? and you?'
  • 旧字符串: 'you'
  • 新字符串: 'me'
  • 结果: 'how are me? and me?'
def replace(str0, str1, str2):
    """
输出str0中用str2替换str1后的字符串
    :param str0: 原字符串
    :param str1: 待替换旧字符串
    :param str2: 待替换新字符串
    :return:
    """
    count_tmp1 = 0
    for _ in str1:
        count_tmp1 += 1
    count_tmp0 = 0
    for _ in str0:
        count_tmp0 += 1
    index_list = []
    for index in range(count_tmp0 - count_tmp1):
        if str0[index:index+count_tmp1] == str1:
            index_list.append(index)
    str_tmp = ''
    index_tmp = 0
    for num in index_list:
        str_tmp += str0[index_tmp:num] + str2
        index_tmp = num + count_tmp1
    return str_tmp


print(replace('how are you? and you? how are you? and you?', 'you', 'me'))
#                                     # how are me? and me? how are me? and me

18.写四个函数,分别实现求两个列表的交集、并集、差集、补集的功能

18.1交集 intersection

def q_intersection(list1, list2):
    """
    输入两个序列:返回它们的公共部分(交集,去重)
    """
    list_tmp = []
    for num1 in list1:
        for num2 in list2:
            if num1 == num2:
                for num3 in list_tmp:
                    if num1 == num3:
                        break
                else:
                    list_tmp.append(num1)
                break
    return list_tmp


print(q_intersection('sysiu', 'aswsd'))    # ['s']
print(q_intersection([1, 2, 5, 6, 3, 4, 5, 6], [5, 6, 5, 6, 7, 8, 9]))    # [5, 6]

18.2并集 union

def q_union(list1, list2):
    """
输入两个序列:输出合并后的序列(并集,去重)
    """
    list_tmp = list(list1 + list2)
    for num1 in list_tmp[:]:
        count1 = -1
        for num2 in list_tmp:
            if num1 == num2:
                 count1 += 1
        if count1:
            list_tmp.remove(num1)
    return list_tmp


print(q_union('sysiu', 'aswsd'))    # ['y', 'i', 'u', 'a', 'w', 's', 'd']
print(q_union([1, 2, 5, 6, 3, 4, 5, 6], [5, 6, 5, 6, 7, 8, 9]))    # [1, 2, 3, 4, 5, 6, 7, 8, 9]

18.3补集 complementary

def q_complementary(list1, list2):
    """
输入两个序列:返回它们的补集(补集,去重)
    """
    list_tmp = list(list1 + list2)
    for num1 in list_tmp[:]:
        count1 = 0
        for num2 in list_tmp:
            if num1 == num2:
                count1 += 1
        if count1 > 1:
            for _ in range(count1):
                list_tmp.remove(num1)
    return list_tmp


print(q_complementary('sysiu', 'aswsd'))    # ['y', 'i', 'u', 'a', 'w', 'd']
print(q_complementary([1, 2, 5, 6, 3, 4, 5, 6], [5, 6, 5, 6, 7, 8, 9]))    # [1, 2, 3, 4, 7, 8, 9]

18.4差集 difference

def q_difference(list1, list2):
    """
输入两个序列:返回第一个序列的差集(差集,去重)
    """
    list_tmp = list(list1)
    for num1 in list1:
        for num2 in list2:
            if num1 == num2:
                list_tmp.remove(num1)
                break
    return list_tmp


print(q_difference('sysiu', 'aswsd'))    # ['y', 'i', 'u']
print(q_difference([1, 2, 5, 6, 3, 4, 5, 6], [5, 6, 5, 6, 7, 8, 9]))    # [1, 2, 3, 4]

你可能感兴趣的:(python_day10_homework)