我有这个问题要解决,如图所示。我已经尝试了下面给出的代码
# -*- coding: utf-8 -*-
"""
Spyder Editor
This is a temporary script file.
"""
from constraint import *
problem = Problem()
problem.addVariable('oneACROSS',['HOSES','LASER','SAILS','SHEET','STEER'])
problem.addVariable('fourACROSS',['HEEL','HIKE','KEEL','KNOT','LINE'])
problem.addVariable('sevenACROSS',['AFT','ALE','EEL','LEE','TIE'])
problem.addVariable('eightACROSS',['HOSES','LASER','SAILS','SHEET','STEER'])
problem.addVariable('twoDOWN', ['HOSES','LASER','SAILS','SHEET','STEER'])
problem.addVariable('threeDOWN', ['HOSES','LASER','SAILS','SHEET','STEER'])
problem.addVariable('fiveDOWN',['HEEL','HIKE','KEEL','KNOT','LINE'])
problem.addVariable('sixDOWN',['AFT','ALE','EEL','LEE','TIE'])
problem.addConstraint(lambda oneACROSS,twoDOWN : oneACROSS[3]==twoDOWN[1])
problem.addConstraint(lambda oneACROSS,threeDOWN : oneACROSS[5]==threeDOWN[1])
problem.addConstraint(lambda fourACROSS,twoDOWN : fourACROSS[2]==twoDOWN[3])
problem.addConstraint(lambda fourACROSS,fiveDOWN : fourACROSS[3]==fiveDOWN[1])
problem.addConstraint(lambda threeDOWN,fourACROSS : fourACROSS[4]==threeDOWN[3])
problem.addConstraint(lambda twoDOWN,sevenACROSS : sevenACROSS[1]==twoDOWN[4])
problem.addConstraint(lambda sevenACROSS,fiveDOWN : sevenACROSS[2]==fiveDOWN[2])
problem.addConstraint(lambda threeDOWN,sevenACROSS : sevenACROSS[3]==threeDOWN[4])
problem.addConstraint(lambda sixDOWN,eightACROSS : eightACROSS[1]==sixDOWN[2])
problem.addConstraint(lambda twoDOWN,eightACROSS : eightACROSS[3]==twoDOWN[5])
problem.addConstraint(lambda fiveDOWN,eightACROSS : eightACROSS[4]==fiveDOWN[3])
problem.addConstraint(lambda threeDOWN,eightACROSS : eightACROSS[5]==threeDOWN[5])
solution=problem.getSolutions()
print(solution)
但它给了我这个错误
运行文件('C:/用户/aliya/. spyder-py 3/temp.py',wdir ='C:/用户/aliya/. spyder-py 3')追溯(最近调用最后):
运行文件中的文件“",第1行(”C:/用户/aliya/. spyder-py 3/temp.py“,wdir =”C:/用户/aliya/. spyder-py 3“)
运行文件执行文件(文件名、命名空间)中的文件“C:\ProgramData\Anaconda 3\lib\站点包\spyder_kernels\customize\spydercustomize.py”,第668行
文件“C:\ProgramData\Anaconda 3\lib\site-packages\spyder_kernels\customize\spydercustomize.py”,第108行,在执行文件exec(编译(f.read(),文件名,'exec'),命名空间)中
文件“C:/用户/aliya/. spyder-py 3/temp.py“,第50行,在解决方案=问题.getSolutions()中
文件“C:\ProgramData\Anaconda 3\lib\site-packages\constraint__init__.py”,第271行,在getSolutions中返回self.solver.getSolutions(域、约束、vconstraint)
文件“C:\ProgramData\Anaconda 3\lib\站点包\约束__init_.py”,第567行,在getSolutions返回列表中(自定义.getSolutionIter(域,约束,v约束))
文件“C:\ProgramData\Anaconda 3\lib\site-packages\constraint__init__.py”,第544行,如果没有约束(变量、域、赋值、推送域),则在getSolutionIter中:
文件“C:\ProgramData\Anaconda 3\lib\site-packages\constraint__init__.py”,第991行,在调用self.forwardCheck(变量、域、赋值)中
文件“C:\ProgramData\Anaconda 3\lib\site-packages\constraint__init__.py”,第935行,向前检查是否不是self(变量、域、赋值):
文件“C:\程序数据\Anaconda 3\库\站点包\约束__初始化__.py”,第993行,在调用返回自身._函数(* 参数)中
TypeError:lambda()接受2个位置参数,但实际给出了8个
任何关于这个的帮助!
4条答案
按热度按时间gcxthw6b1#
在所有以
problem.addConstraint
开头的行中,你都使用了以数字开头的变量名,例如1ACROSS
和2DOWN
,这在Python中是不允许的,例如,尝试将它们命名为ONEACROSS
和TWODOWN
,或者VAR1ACROSS
和VAR2DOWN
,这样会更好。brtdzjyr2#
Python语法分析器禁止用这种方式命名变量,这是为了分别分析数字和变量,因为命名变量
1e1
会造成混乱--是数字10.0
还是变量1e1
?"Python,请为我输出
1e1
!"-"为什么是10.0?我在那里存储了100!"但是变量实际上是以一种允许将以数字开头的字符串绑定到值的方式存储的,因为这种特性对任何类型的散列Map都没有害处,所以使用这种"技巧",您可以在不损害解析器可分割性的情况下实现所需的数字前缀名称变量。
我想说的是,从技术上讲,用这种方式命名变量并不违反python准则,但这是非常不鼓励的,而且通常也是不必要的。使用全局变量注入变量是众所周知的一种非常糟糕的做法,这种情况不应该是一个突出的例子。
所以改变
收件人:
wooyq4lh3#
你好,亲爱的填字游戏是一个非常复杂的问题,我有一个解决这个问题的方法,但是是用谷歌的ortools库实现的。下面是使用这个库的要求:要求:
以下是此问题的代码:
希望你得到答案
lymnna714#
将lambda函数中的所有变量名相加,并且列表的索引为零,因此索引从0开始。