The user has to enter a 4x4 grid of numbers as follows:
[[2,1024,8,8],
[4,1024,16,32],
[2,32,64,128],
[8,256,2,2]]
接下来,要求用户输入一个数字,例如对于这个特定示例,我选择2048。
现在代码需要检查两个相邻框(上或下)的总和是否具有给定数字的加法,在这种情况下为2048,如果是,则该框是正确的,否则为false。 打印结果。
代码必须包含子列表,而不能包含字典或元组等。
好吧,我对python还是比较陌生,并且在线获得了这个问题。 我试着解决这个问题,但无济于事。到目前为止,我创建的只是一个子列表,用于接受输入,并尝试一个接一个地逐个检查,但时间太长。
这是代码
a=[[2,1024,8,8],
[4,1024,16,32],
[2,32,64,128],
[8,256,2,2]]
def winning(a):
for i in range(0,4):
for j in range(0,4):
if (i==0):
if(j==0):
if a[i,j]+a[(i+1),j]==2048:
True
if(j==3):
if a[i,j]+a[i+1,j]==2048:
True
if a[i,j]+a[i,j-1]==2048 or a[i,j]+a[i+1,j]==2048 or a[i,j]+a[i,j+1]==2048:
True
if(i==1 or i==2):
if(j==0):
if a[i,j]+a[i,j+1]==2048 or a[i,j]+a[i-1,j]==2048 or a[i,j]+a[i+1,j]==2048:
True
if(j==3):
if a[i,j]+a[i-1,j]==2048 or a[i,j]+a[i+1,j]==2048 or a[i,j]+a[i,j-1]==2048:
True
if a[i,j]+a[i,j-1]==2048 or a[i,j]+a[i,j+1]==2048 or a[i,j]+a[i-1,j]==2048 or a[i,j]+a[i+1,j]==2048:
True
if(i==3):
if(j==0):
if a[i,j]+a[i-1,j]==2048:
True
if(j==3):
if a[i,j]+a[i-1,j]==2048:
True
if a[i,j]+a[i,j-1]==2048 or a[i,j]+a[i-1,j]==2048 or a[i,j]+a[i,j+1]==2048:
True
return false
assert winning(a)
答案 0 :(得分:1)
最好将代码拆分为更多所需的功能。此外,您还可以为变量添加非硬编码值(除非此矩阵4x4是您打算执行此操作的唯一方法)。
首先,我们找到此矩阵中有多少行,以及每行的长度是否等于一个常量值(并且它们之间没有区别); 然后定义两个函数:
sum_up_down
,给定一个位置(行的索引和列的索引),给我们一个元组,将元素保持在该位置,其总和为其上限值,其总和为其下限值;
find_number
仅遍历矩阵,找到每个可能的元组,并在第一个匹配项(number in result
,其中number
是您的选择,例如2048,而{{1 }}包含三个值的元组。
然后我们打印矩阵并循环,每次查找用户指定的数字。
如果您不需要/想要查找元素(只需上下求和),只需编辑result
的返回并删除sum_up_down
element