Ответ 1
has_key
был удален в Python 3. Из документация:
- Удалено
dict.has_key()
- вместо этого используйтеin
.
Вот пример:
if start not in graph:
return None
При перемещении графика в Python я получаю эту ошибку:
'dict' объект не имеет атрибута 'has_key'
Вот мой код:
def find_path(graph, start, end, path=[]):
path = path + [start]
if start == end:
return path
if not graph.has_key(start):
return None
for node in graph[start]:
if node not in path:
newpath = find_path(graph, node, end, path)
if newpath: return newpath
return None
Код предназначен для поиска путей от одного node к другим. Источник кода: http://cs.mwsu.edu/~terry/courses/4883/lectures/graphs.html
Почему я получаю эту ошибку и как ее исправить?
has_key
был удален в Python 3. Из документация:
- Удалено
dict.has_key()
- вместо этого используйтеin
.
Вот пример:
if start not in graph:
return None
Я считаю, что более "pythonic" просто использует in
при определении того, существует ли ключ, как в
if start not in graph:
return None
Весь код в документе будет:
graph = {'A': ['B', 'C'],
'B': ['C', 'D'],
'C': ['D'],
'D': ['C'],
'E': ['F'],
'F': ['C']}
def find_path(graph, start, end, path=[]):
path = path + [start]
if start == end:
return path
if start not in graph:
return None
for node in graph[start]:
if node not in path:
newpath = find_path(graph, node, end, path)
if newpath: return newpath
return None
После записи сохраните документ и нажмите F 5
После этого код, который вы запускаете в оболочке IDLE Python, будет выглядеть следующим образом:
find_path (граф, 'A', 'D')
Ответ, который вы должны получить в IDLE,
['A', 'B', 'C', 'D']