我无法弄清楚导致我的代码在执行结束时打印“无”的原因。这段代码应该读取一个txt文件,其中包含一个零和一个矩阵,并打印由第一个形成的正交“岛”的坐标。
from itertools import groupby
from operator import itemgetter
def matrixReader(inputFile): # Reads the file and creates the matrix map.
w, h = map(int, inputFile.readline().strip().split())
matrix = [list(map(int, line.strip())) for line in inputFile]
return matrix, h, w
def matrixAdvancedSweeper(matrix, h, w): # Swipes the matrix map after NEW land chunks and makes a tuple for each piece of land.
islandCount = 1
landCoordinates = []
for y in range(h):
for x in range(w):
if matrix[y][x] == 1:
islandCount += 1
islandSorter(matrix, y, x, islandCount)
if matrix[y][x] > 1:
landCoordinates.append((matrix[y][x]-1, y, x)) # Creates a list of tuples with the number of the island, height position and width position.
return sorted(landCoordinates, key=itemgetter(0, 1)) # Sorts the list of tuples (first) by number of the island and (second) by height position.
def islandSorter(m, h, w, c): # Recursive function to enumerate and hide any land attached to a chunk already swiped.
if m[h][w] == 1:
m[h][w] = c
if w < len(m[0]) - 1: islandSorter(m, h, w + 1, c)
if h < len(m) - 1: islandSorter(m, h + 1, w, c)
if w > 0: islandSorter(m, h, w - 1, c)
if h > 0: islandSorter(m, h - 1, w, c)
def coordinatePrinter(sortedCoordinates): # Prints the groups of coordinates that forms each island.
for key, group in groupby(sortedCoordinates, lambda x: x[0]): # Creates groups using the first item of the tuples as key and traverses those returning each key and group.
print('____________\n Island %s\nCoordinates:' % (key))
for tile in group:
print(' x %s y %s' % (tile[1], tile[2]))
with open('TestFile.txt') as inputFile: # Opens the defined file to execute the nested code and than closes it.
print(coordinatePrinter(matrixAdvancedSweeper(*matrixReader(inputFile))))
以下是应该读取的文件(TestFile.txt)的示例,用于测试目的:
4 4
1110
0000
0000
0110
答案 0 :(得分:0)
问题是您在调用方法时使用的print语句:
with open('TestFile.txt') as inputFile: # Opens the defined file to execute the nested code and than closes it.
print(coordinatePrinter(matrixAdvancedSweeper(*matrixReader(inputFile))))
print语句的返回类型为None
。因此,一旦您的函数执行完成,您的print语句将以None
简单的解决方案是删除print
,如:
with open('TestFile.txt') as inputFile: # Opens the defined file to execute the nested code and than closes it.
coordinatePrinter(matrixAdvancedSweeper(*matrixReader(inputFile)))
因为您已经在coordinatePrinter
函数