Python代码打印不需要的行

时间:2017-05-01 09:10:12

标签: python

我无法弄清楚导致我的代码在执行结束时打印“无”的原因。这段代码应该读取一个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

1 个答案:

答案 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函数

中打印了值