无法连接Int和Str对象

时间:2014-03-22 03:39:18

标签: python python-3.x

我有这个代码,它返回" TypeError:无法连接' str'和' int'对象&#34 ;. '号码'整数是全局变量。

print (str("+---+---+---+"))
print (str("| ")) + (int(number1)) + (str(" | ")) + (int(number2)) + (str(" | ")) + (int(number3)) + (str("|"))
print (str("+---+---+---+"))
print (str("| ")) + (int(number4)) + (str(" | ")) + (int(number5)) + (str(" | ")) + (int(number6)) + (str("|"))
print (str("+---+---+---+"))
print (str("| ")) + (int(number7)) + (str(" | ")) + (int(number8)) + (str(" | ")) + (int(number9)) +(str("|"))
print (str("+---+---+---+"))

代码应打印出类似的内容。

+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| 4 | 5 | 6 |
+---+---+---+
| 7 | 8 | 9 |
+---+---+---+

5 个答案:

答案 0 :(得分:1)

您的代码必须是这样的:

print (str("+---+---+---+"))
print (str("| ")) + (str(number1)) + (str(" | ")) + (str(number2)) + (str(" | ")) + (str(number3)) + (str("|"))
print (str("+---+---+---+"))
print (str("| ")) + (str(number4)) + (str(" | ")) + (str(number5)) + (str(" | ")) + (str(number6)) + (str("|"))
print (str("+---+---+---+"))
print (str("| ")) + (str(number7)) + (str(" | ")) + (str(number8)) + (str(" | ")) + (str(number9)) +(str("|"))
print (str("+---+---+---+"))

我建议您使用一些变量并删除一些括号,如下所示:

line = "+---+---+---+"
pipe = "| "

print line
print pipe + str(number1) + pipe + str(number2) + pipe + str(number3) + pipe
print line
print pipe + str(number4) + pipe + str(number5) + pipe + str(number6) + pipe
print line
print pipe + str(number7) + pipe + str(number8) + pipe + str(number9) + pipe 
print line

答案 1 :(得分:0)

在Python中,类型之间没有隐式转换,因此语言要求您明确决定要做什么。这有助于避免以后出现许多难以调试的错误,我认为它是Python的一大优势。

您需要使用内置str(your_number)将数字转换为字符串。稍微清理你的代码也很好......

numbers = range(1,10)
number1, number2, number3, \
    number4, number5, number6, \
    number7, number8, number9 = numbers

print ("+---+---+---+")
print ("| " + str(number1) + " | " + str(number2) + " | " + str(number3) + " |")
print ("+---+---+---+")
print ("| " + str(number4) + " | " + str(number5) + " | " + str(number6) + " |")
print ("+---+---+---+")
print ("| " + str(number7) + " | " + str(number8) + " | " + str(number9) + " |")
print ("+---+---+---+")

另外,为每个数字创建变量并不是一个好主意,最好使用像list这样的容器。您可以使用range(1,10)创建1到10之间的数字列表。您可以稍后像数组一样使用它。

我们可以使用字符串替换使代码更简单:

numbers = range(1,10)
horizontal_sep = "+---+---+---+"    

print (horizontal_sep)
print ("| {} | {} | {} |".format(*numbers[0:3]))
print (horizontal_sep)
print ("| {} | {} | {} |".format(*numbers[3:6]))
print (horizontal_sep)
print ("| {} | {} | {} |".format(*numbers[6:9]))
print (horizontal_sep)

这里我们用{}标记我们插入变量的地方,我们在格式()内部传递。我们把数字列表中的切片放在那里。 Slice也是一个列表,因此我们用*运算符解压缩它,因此每个3元素长列表被解包为3个整数。

最后,我们可以看到我们的切片在其索引中有一些共同的模式。我们可以使用zip()range()内置函数轻松生成它,并将其用于循环:

numbers = range(1,10)
horizontal_sep = "+---+---+---+"    

# zip(...) generates pairs (0, 3) (3, 6) (6, 9)
for start, end in zip(range(0, 10, 3), range(3, 10, 3)): 
    print (horizontal_sep)
    print ("| {} | {} | {} |".format(*numbers[start:end]))
print (horizontal_sep)

答案 2 :(得分:0)

你可以.format

nums=[[1,2,3],[4,5,6],[7,8,9]]
fmt="| {0} | {1} | {2} |"
ln="+---+---+---+"
for number in nums:
    print (ln)
    print (fmt.format(number[0],number[1],number[2]))

print (ln)

将返回::

+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| 4 | 5 | 6 |
+---+---+---+
| 7 | 8 | 9 |
+---+---+---+

答案 3 :(得分:0)

您可以转换为字符串,然后将其与separatro连接并打印出来,如下所示:

nums = [1,2,3]
print ' | '.join( map(str, nums) )

事实上,当你有一个2-d列表时:

allNums = [[1,2,3], [4,5,6], [7,8,9]]
numPrnt = ['| ' + ' | '.join( map(str, nums) ) + ' |' for nums in allNums]
separator = '+---+---+---+\n'
ends      = '+---+---+---+\n'

print ends, separator.join( numPrint ), ends,

Shouls能够为你打印...

答案 4 :(得分:0)

您似乎对intstr函数的作用感到困惑。它实际上与您使用它们的方式相反:int将字符串转换为整数,str将数字(或其他任何内容)转换为字符串。

所以,既然你希望所有东西都是一个字符串来连接它们,你应该使用str(integer1)等,而" | "就足够了(而不是str(" | ")),因为{ {1}}已经是一个字符串。

此外,您不需要使用``str(...)来启动每个打印参数,因为它们已经是字符串。所以第一行是:

" | "

等等。