作业
import random
import math
1.写一个匿名函数,判断指定的年是否是闰年
func_1 = lambda years: (years % 4 == 0 or years % 100 != 0) and years % 400 == 0
print(func_1(2001)) # False
print(func_1(2000)) # True
2.写一个函数将一个指定的列表中的元素逆序
(如[1, 2, 3] -> [3, 2, 1])(注意:不要使用列表自带的逆序函数)
1.用新列表保存
def reverse_order(list_1: list):
list_2 = []
for i in list_1[-1::-1]:
list_2.append(i)
return list_2
print(reverse_order([1, 2, 3])) # [3, 2, 1]
2.不产生新列表
def reverse_order(list_1: list):
list_2 = list_1
for i in list_2[-1::-1]:
list_1.remove(i)
list_1.append(i)
return list_1
print(reverse_order([1, 2, 3])) # [3, 2, 1]
3.写一个函数,获取指定列表中指定元素的下标(如果指定元素有多个,将每个元素的下标都返回)
例如: 列表是:[1, 3, 4, 1] ,元素是1, 返回:0,3
def list_re(list_2: list, li):
list_3 = []
for i in range(0, len(list_2)):
if li == list_2[i]:
list_3.append(i)
return list_3
print(list_re([1, 3, 4, 2, 1, 5, 2, 1], 1)) # [0, 4, 7]
4.写一个函数,能够将一个字典中的键值对添加到另外一个字典中(不使用字典自带的update方法)
def dict_upper(dict_1: dict, dict_2: dict):
for key in dict_1:
dict_2[key] = dict_1[key] # 字典添加键值对的方式 字典[key] = 值
return dict_2
print(dict_upper({"a": 1, "b": 2}, {"c": 3})) # {'c': 3, 'a': 1, 'b': 2}
5.写一个函数,能够将指定字符串中的所有的小写字母转换成大写字母;
所有的大写字母转换成小写字母(不能使用字符串相关方法)
def letter_self(chars: str):
new_str = ""
for char in chars:
if 'A' <= char <= 'Z':
new_str += chr(ord(char) + 32)
elif 'a' <= char <= 'z':
new_str += chr(ord(char) - 32)
else:
new_str += char
return new_str
print(letter_self("133dkffSDGGLS")) # 133DKFFsdggls
6.实现一个属于自己的items方法,可以将指定的字典转换成列表。
列表中的元素是小的列表,里面是key和value (不能使用字典的items方法)
例如:{'a':1, 'b':2} 转换成 [['a', 1], ['b', 2]]
字典无序,不支持下标操作
def dict_items(dict_3: dict):
list_d_1 = []
# list_d_2 = []
for key in dict_3:
list_d_2 = []
list_d_2.append(key)
list_d_2.append(dict_3[key])
# print(list_d_2)
list_d_1.append(list_d_2)
return list_d_1
print(dict_items({"a": 1, "b": 2})) # [['a', 1], ['b', 2]]
7.用递归函数实现,逆序打印一个字符串的功能:
例如:reverse_str('abc') -> 打印 ‘cba’
def reverse_ord(chars):
length = len(chars)
if length == 1:
print(chars)
return
else:
print(chars[length-1], end="")
chars = chars[0:(length-1)] # 当字符串长度大于1的时候每次打印后 新的字符串是原来字符串切去最后一个字符产生的
reverse_ord(chars)
reverse_ord("abc")
8.编写一个递归函数,求一个数的n次方
def secondary_power(number: int, n: int):
if n == 1:
return number
else:
return secondary_power(number, n-1) * number # 括号内的number在此并无实在意义,只是参数列表有不能省略
print(secondary_power(2, 4))
9.写一个可以产生学号的生成器, 生成的时候可以自定制学号数字位的宽度和学号的开头
def id_generate(number: int, width: int, start: str):
# new_str = ""
# count = 0
for n in range(1, number+1):
str_1 = str(n)
new_str = start + str_1.zfill((width - len(start)))
# print(new_str)
yield new_str
f = id_generate(3, 8, "py")
print(next(f))
print(next(f))
print(next(f))
10.编写代码模拟达的鼠的小游戏,
假设一共有5个洞口,老鼠在里面随机一个洞口;
人随机打开一个洞口,如果有老鼠,代表抓到了
如果没有,继续打地鼠;但是地鼠会跳到其他洞口
def wha_a_mole(frequency: int): # 最多抓取次数
count = 1
for i in range(frequency+1):
hole_num = random.randint(1, 5)
mouse = random.randint(1, 5)
if hole_num != mouse:
# print("没抓到吧!")
count += 1
elif count > frequency:
print("你可太差劲了!被老鼠逗了")
else:
print("抓到了,一共抓了%d次" % count)
break
wha_a_mole(10)
11.编写一个函数,计算一个整数的各位数的平方和
def squares_sum(integer: int):
sum_squares = 0
while integer > 0:
remainder = 0
remainder = integer % 10
integer //= 10
sum_squares += remainder**2
else:
return sum_squares
print(squares_sum(12))
12楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,
编程序计算共有多少种不同的走法?需求: 编制一个返回值为整型的函数Fib(n),用于获取n阶台阶的走法
实质上是一个斐波拉契数列
def up_steps(steps_num: int):
if steps_num == 1:
return 1
elif steps_num == 2:
return 2
else:
return up_steps(steps_num - 2) + up_steps(steps_num - 1)
print(up_steps(6))
13.写一个函数对指定的数分解因式
def factor(number: int):
i = 2
list_1 = []
while i <= number:
if number % i == 0:
list_1.append(i)
number /= i
else:
i += 1
if len(list_1) == 1: # 如果传入的数本身是个质数,则在它的因数列表中插入1
list_1.insert(0, 1)
# print(list_1)
return list_1
print(factor(3))
14.写一个函数判断指定的数是否是回文数
123321是回文数 12321是回文数 525是回文数
1.算法实现
def pal_number(number: int):
number_1 = str(number)
length = len(number_1)
for i in range(0, length):
if number_1[i] == number_1[length - i-1]:
flag = 1
else:
flag = 0
if flag == 1:
print("是回文数")
else:
print("不是回文数")
pal_number(12321)
2.利用字符串reverse函数逆序
def pal_number(number: int):
char_1 = str(number)
char_2 = "".join(reversed(char_1))
if char_1 == char_2:
print("是回文数")
else:
print("不是回文数")
pal_number(12321)
15.写一个函数判断一个数是否是丑数(自己百度丑数的定义)
def ugliness_number(number):
list_1 = []
i = 2
while i <= number:
if number % i == 0:
list_1.append(i)
number /= i
else:
i += 1
# print(list_1)
set_1 = set(list_1)
set_2 = {2, 3, 5}
if set_2 > set_1 or set_2 == set_1:
print("是丑数")
else:
print("不是丑数")
ugliness_number(30)