检查Magic Square python

2024-09-23 22:22:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用python创建一个程序,该程序将基于文本文件来决定一个正方形是否是幻方。你知道吗

def getRowsAndColumns(user2DimensionalList): numberOfRows = len(user2DimensionalList) numberOfColumns = len(user2DimensionalList[0]) return numberOfRows, numberOfColumns def getFirstRowSum(user2DimensionalList, numberOfColumns): firstRowSum = 0 for currentRowIndex in range(1): for currentColumnIndex in range(numberOfColumns): firstRowSum = firstRowSum + user2DimensionalList[currentRowIndex][currentColumnIndex] return firstRowSum def hasEqualRowSums(user2DimensionalList, firstRowSum, numberOfRows, numberOfColumns): rowSum = 0 for currentRowIndex in range(numberOfRows): for currentColumnIndex in range(numberOfColumns): rowSum = rowSum + user2DimensionalList[currentRowIndex][currentColumnIndex] if rowSum != firstRowSum: return False rowSum = 0 return True def hasEqualColumnSums(user2DimensionalList, firstRowSum, numberOfRows, numberOfColumns): columnSum = 0 for currentColumnIndex in range(numberOfColumns): for currentRowIndex in range(numberOfRows): columnSum = columnSum + user2DimensionalList[currentRowIndex][currentColumnIndex] if columnSum != firstRowSum: return False columnSum = 0 return True def hasEqualRowAndColumnSums(user2DimensionalList, firstRowSum, numberOfRows, numberOfColumns): if hasEqualRowSums(user2DimensionalList, firstRowSum, numberOfRows, numberOfColumns) and hasEqualColumnSums(user2DimensionalList, firstRowSum, numberOfRows, numberOfColumns): return True else: return False def hasFromLeftEqualDiagonalSum(user2DimensionalList, lengthOfAnyRowOrColumn, firstRowSum): fromLeftDiagonalSum = 0 for currentDiagonalNumberIndex in range(lengthOfAnyRowOrColumn): fromLeftDiagonalSum = fromLeftDiagonalSum + user2DimensionalList[currentDiagonalNumberIndex][currentDiagonalNumberIndex] if fromLeftDiagonalSum != firstRowSum: return False else: return True def hasFromRightEqualDiagonalSum(user2DimensionalList, lengthOfAnyRowOrColumn, firstRowSum): fromRightDiagonalSum = 0 currentDiagonalNumberColumnIndex = lengthOfAnyRowOrColumn - 1 for currentDiagonalNumberRowIndex in range(lengthOfAnyRowOrColumn): fromRightDiagonalSum = fromRightDiagonalSum + user2DimensionalList[currentDiagonalNumberRowIndex][currentDiagonalNumberColumnIndex] currentDiagonalNumberColumnIndex = currentDiagonalNumberColumnIndex - 1 if fromRightDiagonalSum != firstRowSum: return False else: return True def hasEqualDiagonalSums(user2DimensionalList, lengthOfAnyRowOrColumn, firstRowSum): if hasFromLeftEqualDiagonalSum(user2DimensionalList, lengthOfAnyRowOrColumn, firstRowSum) and hasFromRightEqualDiagonalSum(user2DimensionalList, lengthOfAnyRowOrColumn, firstRowSum): return True else: return False def isLoShuMagicSquare(user2DimensionalList, firstRowSum, numberOfRows, numberOfColumns, lengthOfAnyRowOrColumn): if hasEqualRowAndColumnSums(user2DimensionalList, firstRowSum, numberOfRows, numberOfColumns) and hasEqualDiagonalSums(user2DimensionalList, lengthOfAnyRowOrColumn, firstRowSum): return True else: return False def main(): user2DimensionalList = open("input.txt", "r") user2DimensionalList = user2DimensionalList.read() numberOfRows, numberOfColumns = getRowsAndColumns(user2DimensionalList) lengthOfAnyRowOrColumn = numberOfRows firstRowSum = getFirstRowSum(user2DimensionalList, numberOfColumns) if isLoShuMagicSquare(user2DimensionalList, firstRowSum, numberOfRows, numberOfColumns, lengthOfAnyRowOrColumn): print("VALID") else: print("INVALID") main()
以下是我的txt文件中的内容:

4 3 8 9 5 1 2 7 6 8 3 4 1 5 9 6 7 2 6 1 8 7 5 3 2 9 4 6 9 8 7 5 3 2 1 4 6 1 8 7 5 3 2 1 4 6 1 3 2 9 4 8 7 5 5 5 5 5 5 5 5 5 5

我不知道我做错了什么我得到了这个错误:

Traceback (most recent call last): File "/Users/noahhenkle/Desktop/MagicSquare2.py", line 98, in <module> main() File "/Users/noahhenkle/Desktop/MagicSquare2.py", line 91, in main firstRowSum = getFirstRowSum(user2DimensionalList, numberOfColumns) File "/Users/noahhenkle/Desktop/MagicSquare2.py", line 12, in getFirstRowSum firstRowSum = firstRowSum + user2DimensionalList[currentRowIndex][currentColumnIndex] TypeError: unsupported operand type(s) for +: 'int' and 'str'

我几乎可以肯定的代码是正确的,但txt文件是混乱的一切。 我在下面包括了回溯。你知道吗


Tags: infalsetrueforreturnifdefrange
1条回答
网友
1楼 · 发布于 2024-09-23 22:22:02

非常简单,您读入一堆字符数据,而从不转换为整数。然后尝试对数据执行算术运算,从整数值0开始。你知道吗

在某个时刻,你必须转换你的值。目前,您有一个126x1“2Dim列表”。对行求和的尝试从尝试添加0 + "4"开始。你知道吗

我强烈建议您恢复到增量编程。您发布了100行代码,但没有测试为程序其余部分提供信息的输入。你知道吗

相关问题 更多 >