2017-05-01 67 views
0

我无法弄清楚是什么导致我的代码在执行结束时打印“无”。该代码应该读取一个包含零和一个矩阵的txt文件,并打印由数字1形成的正交“岛”的合并。Python代码打印不需要的行

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

问题是,当你调用的方法使用的是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)))) 

打印语句的返回类型是None。所以,一旦你的函数的执行完成打印语句退出与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功能打印值