前言
本群的作业,没有指定Python方向,而在于提升群内成员的语言功底,以便大家在Python的其他方向走的更远。
本群欢迎任何程度的Python学习者
Python程序设计 群号:651707058
题一:水仙花数
打印出100-1000所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
def get_flower_number(start,end):
'''
:param start:水仙花数范围的开始
:param end: 水仙花数范围的结束
:return: list[int] 保存水仙花数的list
'''
res = []
for i in range(start,end):
if i == (i//100)**3+(i//10%10)**3+(i%10)**3:
res.append(i)
return res
print(get_flower_number(100,1000))
题二:颠倒字典的键值对
颠倒一个字典的键值对
例如原来的字典是:{‘A’:’a’, ‘B’:’b’, ‘C’:’c’}
跌倒过来是{‘a’:’A’, ‘b’:’B’, ‘c’:’C’}
D = {'A':'a', 'B':'b', 'C':'c'}
res = {v:k for k,v in D.items()}
print(res)
题三:二分法练习
使用二分法来将一个数插入到一个已经升序的列表,遇到相等的数字,插入到其右边
例如:[1,4,7,11] 要插入2
结果:[1,2,4,11]
例如:[1,4,7,11] 要插入4.0
结果:[1,4,4.0,7,11] 遇到相等的插到其右边
ps:必须用二分法做出来,不能用Python自带的排序
def insert_list(L,num):
'''
:param num:待插入的列表
:param num: 待插入的数字
:return: list[]
'''
p1,p2 = 0,len(L)-1 #边界值
while p1<=p2:
m = (p1+p2)//2 #中间值
if num<L[m]:p2 = m #更新右边界
else:p1 = m+1 #更新左边界,因为要右插,所以+1 在(L[m]==num or L[m]<num 的时候都需要在其右边插)
L.insert(p1,num)
return L
print(insert_list([1,4],4.0))
题四:有效的数独
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
请设计一个函数,来判断下面的M是否是一个有效的数独 是返回True 否返回False
其中没有数字的用”.”来表示的
”’
M = [
["5","3",".",".","7",".",".",".","."],
["6",".",".","1","9","5",".",".","."],
[".","9","8",".",".",".",".","6","."],
["8",".",".",".","6",".",".",".","3"],
["4",".",".","8",".","3",".",".","1"],
["7",".",".",".","2",".",".",".","6"],
[".","6",".",".",".",".","2","8","."],
[".",".",".","4","1","9",".",".","5"],
[".",".",".",".","8",".",".","7","9"]
]
def isValidSudoku(board):
"""
:type board: List[List[str]]
:rtype: bool
"""
from math import ceil # 用于向上取整,把1-3 4-6 7-9按x/3 y/3向上取整得出1 2 3三类
D = {}
for i in range(1, 10):
for j in range(1, 10):
temp = board[i - 1][j - 1]
if temp != '.' and temp not in D:
D[temp] = [[i, j]]
elif temp != '.':
D[temp].append([i, j])
for k in D:
L = len(D[k])
setx, sety, setxy = set(), set(), set()
for it in D[k]:
setx.add(it[0])
sety.add(it[1])
setxy.add((ceil(it[0] / 3), ceil(it[1] / 3)))
if len(setx) != L or len(sety) != L or len(setxy) != L:
return False
return True
print(isValidSudoku(M))
# 代码说明:
# 把数独改写成此数据结构再来判断:
# {'5': [[1, 1], [2, 6], [8, 9]], '3': [[1, 2], [4, 9], [5, 6]], '7': [[1, 5], [6, 1], [9, 8]], '6': [[2, 1], [3, 8], [4, 5], [6, 9], [7, 2]], '1': [[2, 4], [5, 9], [8, 5]], '9': [[2, 5], [3, 2], [8, 6], [9, 9]], '8': [[3, 3], [4, 1], [5, 4], [7, 8], [9, 5]], '4': [[5, 1], [8, 4]], '2': [[6, 5], [7, 7]]}