Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python &引用;无法连接';str';和';列表';“对象”;接下来是:(_Python - Fatal编程技术网

Python &引用;无法连接';str';和';列表';“对象”;接下来是:(

Python &引用;无法连接';str';和';列表';“对象”;接下来是:(,python,Python,我正在编写一个python程序。该程序使用用户在上一页中输入的两个数字计算拉丁方。但不断出现错误,“无法连接'str'和'list'对象”。程序如下: #!/usr/bin/env python # -*- coding: UTF-8 -*- # enable debugging import cgi import cgitb cgitb.enable() def template(file, **vars): return open(file, 'r').read() % vars

我正在编写一个python程序。该程序使用用户在上一页中输入的两个数字计算拉丁方。但不断出现错误,“无法连接'str'和'list'对象”。程序如下:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# enable debugging
import cgi
import cgitb
cgitb.enable()

def template(file, **vars):
    return open(file, 'r').read() % vars

print "Content-type: text/html\n"
print

form = cgi.FieldStorage() # instantiate only once!
num_1 = form.getfirst('num_1')
num_2 = form.getfirst('num_2')

int1r = str(num_1)
int2r = str(num_2)

def calc_range(int2r, int1r):
    start = range(int2r, int1r + 1)
    end = range(1, int2r)
    return start+end


int1 = int(int1r)

int2 = int(int2r)

out_str = ''

for i in range(0, int1):
    first_line_num = (int2 + i) % int1
    if first_line_num == 0:
        first_line_num = int1
    line = calc_range(first_line_num, int1)
out_str += line


print template('results.html', output=out_str, title="Latin Squares")

通过执行
out\u str+=line
,您试图将一个列表(从calc\u range)添加到字符串中。我甚至不知道这应该做什么,但这就是问题所在。

您没有说错误来自哪一行,但我猜是:

out_str += line
第一个变量是字符串。第二个变量是数字列表。您不能将列表连接到字符串上。我不知道您到底想做什么,但是:

out_str += ", ".join(line)

这将把逗号连接的数字添加到out_str上。

range
返回一个列表对象,所以当您说

line = calc_range(first_line_num, int1)
您正在将列表分配给
line
。这就是
out\u str+=line
抛出错误的原因

您可以使用
str()
将列表转换为字符串,也可以以不同的方式构建字符串以获得所需的结果。

calc\u range()
返回列表;但是,您正在尝试将其添加到字符串中(
out\u str

看起来您的代码尚未完成-您不想对
calc_range()
返回的数字范围做些什么吗?比如说,对表单做些什么

line = ''.join(num_1[index] for index in calc_range(first_line_num, int1))
我不知道这是否是你想要的-但可能是这样的吗?

out_str+=''。join(line)或类似的东西怎么样?只需使用调试技术,伙计!哪一行失败了?在任何一行上插入“STOP”而不加引号-解释器就会爆炸。如果所有其他操作都失败了,就会给你行号。