我有这个代码,它返回" 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 |
+---+---+---+
答案 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)
您似乎对int
和str
函数的作用感到困惑。它实际上与您使用它们的方式相反:int
将字符串转换为整数,str
将数字(或其他任何内容)转换为字符串。
所以,既然你希望所有东西都是一个字符串来连接它们,你应该使用str(integer1)
等,而" | "
就足够了(而不是str(" | ")
),因为{ {1}}已经是一个字符串。
此外,您不需要使用``str(...)来启动每个打印参数,因为它们已经是字符串。所以第一行是:
" | "
等等。