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]