gpt4 book ai didi

Python:如何使我的四色检查器更具可读性

转载 作者:太空宇宙 更新时间:2023-11-03 13:50:51 24 4
gpt4 key购买 nike

我正在尝试编写一个通用程序来检查 The 17x17 problem SOLVED! , 没有单色矩形的 17x17 网格的 4 色。解决方案链接:17.txt .

这是我写的:

from itertools import product

def is_solution(myfile,m,n):
""" m-lines, n-columns """
grid = [c.strip() for c in line.split(',')] for line in open(myfile).readlines()]
for x0,y0 in product(xrange(m),xrange(n)):
start = grid[x0][y0]
for x in xrange(x0+1,m):
if grid[x][y0] == start:
for y in xrange(y0+1,n):
if grid[x0][y] == start == grid[x][y]:
return False
return True


print is_solution('17.txt',17,17)

是否有更易读、更简洁或更有效的方式(按优先级顺序)来编写它?也许使用不同数据结构的不同方法...由于我目前正在学习 Python,因此非常欢迎任何建议。

最佳答案

  1. 您应该将输入/输出逻辑与验证逻辑完全分开(这基本上适用于任何 代码)。这还包括您只将定义放在模块的顶层。实际程序通常会进入如下代码中的条件,只有在直接从命令行调用文件时才会执行(如果它只是 import 由另一个文件编辑)。
  2. 网格的维度可以从输入中导出。此处不需要单独的参数。
  3. 你应该使用整数而不是字符串(这是可选的,但更干净,IMO)

我的尝试(从 STDIN 获取文件,可以像 python script.py < 17.txt 那样调用):

import itertools

def has_monochromatic_rectangles(grid):
# use range instead of xrange here (xrange is not in Python 3)
points = list(itertools.product(range(len(grid)), range(len(grid[0]))))
# check if for any rectangle, all 4 colors are equal
# (this is more brute-force than necessary, but you placed simplicity
# above efficiency. Also, for 17x17, it doesn't matter at all ;)
return any(grid[x1][y1] == grid[x1][y2] == grid[x2][y1] == grid[x2][y2]
for (x1,y1), (x2,y2) in itertools.product(points, points)
if x1 != x2 and y1 != y2)

def has_max_colors(grid, most):
# collect all grid values and uniquify them by creating a set
return len(set(sum(grid, []))) <= most

if __name__ == '__main__':
# read from STDIN (could easily be adapted to read from file, URL, ...)
import sys
grid = [map(int, line.split(',')) for line in sys.stdin]

assert has_max_colors(grid, 4)
assert not has_monochromatic_rectangles(grid)

关于Python:如何使我的四色检查器更具可读性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9237512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com