Mặc dù tôi nghĩ rằng Martijn Pieters trả lời giải quyết vấn đề chính trong câu trả lời của anh ấy [bạn cần quay lại từ trường hợp đệ quy], tôi không nghĩ rằng mã được đề xuất của anh ấy sẽ hoạt động đúng.
Bạn đang cố gắng thực hiện một tìm kiếm chiều sâu đầu tiên cho giá trị
>>> directory = {"a": "a info",
"b": {"c": "b/c info", "d": "b/d info"},
"e": {"f": "e/f info", "g": {"h": "e/g/h info"}}}
>>> print[get_path[directory, "h"]]
e\g\h
>>> print[get_path[directory, r'g\h']]
e\g\h
0 trong >>> directory = {"a": "a info",
"b": {"c": "b/c info", "d": "b/d info"},
"e": {"f": "e/f info", "g": {"h": "e/g/h info"}}}
>>> print[get_path[directory, "h"]]
e\g\h
>>> print[get_path[directory, r'g\h']]
e\g\h
1 Dict lồng nhau. Nhưng mã hiện tại của bạn không xử lý chính xác trường hợp đệ quy. Nó cần phải trả lời một cách thích hợp nếu kết quả được tìm thấy trong một trong các cuộc gọi đệ quy của nó hoặc nếu cuộc gọi đệ quy không tìm thấy mục tiêu.Đây là những gì tôi nghĩ bạn cần, với một số điều được đổi tên hoặc sắp xếp lại cho sự rõ ràng:
def get_path[directory, rqfile, prefix=[]]:
for filename, value in directory.items[]:
path_list = prefix + [filename]
if not isinstance[value, dict]: # base case
path = os.path.join[*path_list]
if rqfile in path: # Found the file. Do you want to do something
return path # with the value here, or is it junk?
else: # recursive case
try:
return get_path[value, rqfile, path_list] # this only returns if
except ValueError: # the recursion doesn't raise
pass
raise ValueError["Requested file not found"] # not found here or in children
Ví dụ sử dụng:
>>> directory = {"a": "a info",
"b": {"c": "b/c info", "d": "b/d info"},
"e": {"f": "e/f info", "g": {"h": "e/g/h info"}}}
>>> print[get_path[directory, "h"]]
e\g\h
>>> print[get_path[directory, r'g\h']]
e\g\h
Nếu bạn không muốn tăng các ngoại lệ khi không tìm thấy tệp, bạn cũng có thể trả về giá trị sentinel như
>>> directory = {"a": "a info",
"b": {"c": "b/c info", "d": "b/d info"},
"e": {"f": "e/f info", "g": {"h": "e/g/h info"}}}
>>> print[get_path[directory, "h"]]
e\g\h
>>> print[get_path[directory, r'g\h']]
e\g\h
2 thay cho dòng cuối cùng và kiểm tra giá trị sentinel trong trường hợp đệ quy thay vì ________ 13/________ 14: result = get_path[value, rqfile, path]
if result is not None:
return result
Câu trả lời được đề xuất
Nhìn vào chức năng của bạn, khi độ sâu> 0, nó thực thi hàm [độ sâu -1], nhưng nó không trả về không có gì [do đó không có]. Bạn phải viết
def function[depth]: if depth > 0: return function[depth - 1] else: return 10 function[5]
Nhảy để đăng
Bạn phải trả về giá trị từ hàm đệ quy.
def function[depth]: if depth > 0: return function[depth - 1] else: return 10 function[5]
EDIT: Xin lỗi, đã kiểm tra nó trong khi nó đã được trả lời.
Nhảy để đăng
Bạn phải trả về giá trị từ hàm đệ quy.
EDIT: Xin lỗi, đã kiểm tra nó trong khi nó đã được trả lời. 1,391 Programming Explorer
Team Colleague
Nhìn vào chức năng của bạn, khi độ sâu> 0, nó thực thi hàm [độ sâu -1], nhưng nó không trả về không có gì [do đó không có]. Bạn phải viết
def function[depth]:
if depth > 0:
return function[depth - 1]
else:
return 10
function[5]
12 năm trước
Bạn phải trả về giá trị từ hàm đệ quy.
def function[depth]:
if depth > 0:
return function[depth - 1]
else:
return 10
function[5]
EDIT: Xin lỗi, đã kiểm tra nó trong khi nó đã được trả lời.
Đã chỉnh sửa 12 năm trước bởi beat_slayer vì: n/a
12 năm trước
Bạn phải trả về giá trị từ hàm đệ quy.
12 năm trước
Bạn phải trả về giá trị từ hàm đệ quy.
def func[depth]:
if depth > 0:
return function[depth - 1]
else:
return 10
EDIT: Xin lỗi, đã kiểm tra nó trong khi nó đã được trả lời.
func[5] returns func[4]
func[4] returns func[3]
func[3] returns func[2]
func[2] returns func[1]
func[1] returns func[0]
func[0] ... takes the other branch of the depth test ... returns 10
Đã chỉnh sửa 12 năm trước bởi beat_slayer vì: n/a
Cảm ơn, nó đã làm việc. Bây giờ tôi đang cố gắng để hiểu tại sao nó lại xảy ra. Có phải vì lần đầu tiên nó thực thi hàm [], không có câu lệnh trả về để nó hoàn thành thực thi hàm và trả về giá trị trả về mặc định của không?
def factorial[num]:
try:
assert num == int[num]
except [AssertionError, ValueError]:
print ["You must pass an integer parameter"]
return None
if num < 0:
return 0 - factorial[-num]
# We know num >= 0 here
if num