Python作业(五)【基础+进价语言练习题】

Day13(Python作业)

(Python作业来自qq群:651707058,欢迎任何程度的Python学习者)

题一:打印水仙花数

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))
#运行结果:[153, 370, 371, 407]

题二:
颠倒一个字典的键值对
例如原来的字典是:{‘A’:’a’, ‘B’:’b’, ‘C’:’c’}
跌倒过来是{‘a’:’A’, ‘b’:’B’, ‘c’:’C’}

D = {'A':'a', 'B':'b', 'C':'c'}
print(D.items())#注意item用法
res = {v:k for k,v in D.items()}
print(res)
#运行结果:dict_items([('A', 'a'), ('C', 'c'), ('B', 'b')])
{'c': 'C', 'b': 'B', 'a': 'A'}

题三:二分法练习
使用二分法来将一个数插入到一个已经升序的列表,遇到相等的数字,插入到其右边
例如:[1,4,7,11] 要插入2
结果:[1,2,4,11]
例如:[1,4,7,11] 要插入4.0
结果:[1,4,4.0,7,11] 遇到相等的插到其右边

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]]}
#运行结果:True

猜你喜欢

转载自blog.csdn.net/qq_42849332/article/details/81662235