這是一個挑戰(zhàn)——嘗試解決以下 5 個 Python/ target=_blank class=infotextkey>Python 編程難題,不要用谷歌或百度去搜索答案。
1) 幻方
幻方是包含數(shù)字 1 到 9 的 3x3 網(wǎng)格。每 3 個連續(xù)數(shù)字(行、列或?qū)蔷€)必須加起來為 15。下面是一個有效的幻方示例:
[ [2, 7, 6],
[9, 5, 1],
[4, 3, 8] ]
在這個謎題中,你得到了一個不完整的幻方。
[ [2, 0, 0],
[0, 0, 0],
[0, 3, 8] ]
幻方不應該有 0。此處,0 表示您需要填寫 1 到 9 之間的數(shù)字。
- 1 到 9 每個數(shù)字只能出現(xiàn)一次
- 3 個數(shù)字的每一行、每一列和對角線的和必須等于 15
def solve(incomplete_square):
# 代碼放這里
square = [
[2, 0, 0],
[0, 0, 0],
[0, 3, 8]
]
solve(square)
# [ [2, 7, 6],
# [9, 5, 1],
# [4, 3, 8] ]
2) 大寫一個搞砸的字典
給你一個亂七八糟的字典,里面有多個非結(jié)構(gòu)化的嵌套。例如:
d = {
"a": {"b":"c"},
"d": {
"e":"f",
"g": {
"h":"i",
"j":"k",
"l":"m"
},
"n": {
"o": {
"p": {
"q": {"r":"s"}
}
}
}
}
}
編寫一個函數(shù),接受這個搞砸的字典,并返回這個字典的副本,其中所有鍵和值都轉(zhuǎn)換為大寫。
d = {
"A": {"B":"C"},
"D": {
"E":"F",
"G": {
"H":"I",
"J":"K",
"L":"M"
},
"N": {
"O": {
"P": {
"Q": {"R":"S"}
}
}
}
}
}
3) 來自字符串的字典
給你一個代表字典的字符串。
string = '{"name":"rocky", "age":5, "imported":True}'
假設鍵值對很簡單,沒有嵌套的列表、字典等集合。值將只是數(shù)字(in/float)、字符串或布爾值。
在不使用 json 庫、exec 或 eval 函數(shù)或任何其他內(nèi)置解析器的情況下,編寫一個接受此字符串的函數(shù),并返回由該字符串表示的實際字典。
4) 迷宮中的最短路徑
您將獲得代表迷宮的字符串列表。
maze = [
"P#----",
"-#-##-",
"------",
"-#-##-",
"-#-#--",
"---#-X",
- P 代表玩家
- - 代表一個空的空間。玩家可以站在空地上
- #代表一堵墻。玩家不能站在墻上
- X代表目標。如果玩家達到目標,他就會獲勝。
編寫一個接受這個迷宮的函數(shù),并返回從玩家到目標的最短路徑。玩家一次只能移動一步,而且只能向 4 個方向移動——向上、向下、向左和向右。該函數(shù)返回的示例:
["down", "down", "right", "right", "right", "right", "right", "down", "down", "down"]
5) 把字典轉(zhuǎn)換為列表
再一次,你會得到一個混亂的、搞砸了的、有多層嵌套的字典。
d = {
"a": "b",
"c": "d",
"e": {
"f": "g",
"h": "i"
},
"j": {
"k": {
"l": {"m":"n"}
}
}
}
編寫一個函數(shù)將其中的每個嵌套字典轉(zhuǎn)換為列表。輸出示例:
d = [
["a", "b"],
["c", "d"],
["e", [
["f", "g"],
["h", "i"]
]],
["j", [
"k", [
"l", ["m", "n"]
]
]]
]
結(jié)論
你單憑自己的能力解決了幾個難題呢?花了多長時間?