Python入门经典例题

第一题:打印水仙花数

”’
打印出100-1000所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
”’

res=[]
for i in range(100,1000):
    a=i//100
    b=i//10-(i//100)*10
    c=i%10
    if a**3+b**3+c**3==i:
        res.append(i)
print(res)

第二题:颠倒字典的键对值

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

d={'A':'a', 'B':'b', 'C':'c'}
L1=[]
L2=[]
for k,v in d.items():
    L1.append(v)
    L2.append(k)
print(dict(zip(L1,L2)))

第三题:二分法练习

”’
使用二分法来将一个数插入到一个已经升序的列表,遇到相等的数字,插入到其右边
例如:[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#更新右边界
        else:p1 = m+1   #更新左边界,因为要右插,所以+1 在(L[m]==num or L[m]
    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))

你可能感兴趣的:(python)