3

我的代码应该在输入后确定并显示二叉树的数量。
我不断收到can't convert int object to str implicitly错误,我不知道如何解决它。它很容易在 3.0 以下的 Python 版本中工作,所以请帮忙,因为我还是 Python 的初学者,我想了解我做错了什么。

import sys
print ("Welcome to Binary Tree Enumeration!")
x = input("Type an integer to output its binary trees: ")
print ("\nYou entered " + str(x))
def distinct(x):
     leafnode = '.'
     dp = []
     newset = set()
     newset.add(leafnode)
     dp.append(newset)
     for i in range(1,x):
         newset = set()
         for j in range(i):
             for leftchild in dp[j]:
                 for rightchild in dp[i-j-1]:
                     newset.add(("(") + leftchild + rightchild + (")"))
         dp.append(newset)
     return dp[-1]
 alltrees = distinct(x+1)
 for tree in alltrees:
     print (tree)
 print ("Thank you for trying this out!")

我忘了补充......这是我得到的错误。

Traceback (most recent call last):
  File "main.py", line 29, in 
    alltrees = distinct(x+1)
TypeError: Can't convert 'int' object to str implicitly
4

3 回答 3

2

正如其他人所建议的那样,这来自您对input. 在 Python27 中:

>>> input() + 1
3 # I entered that
4

但是使用(与Python3+raw_input()具有相同的行为):input

>>> raw_input() + 1
3 # I entered that
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects

事实上,我们有:

>>> x = raw_input()
3
>>> type(x)
<type 'str'>

在您的代码中,您的用户输入是一个字符串,当您尝试添加一个字符串和一个 int 时x,代码会在行上报错。distinct(x+1)首先像这样转换它:

>>> x = int(input())
...
于 2013-11-05T16:00:30.727 回答
1

为了连接各种类型的字符串和字符串表示,您必须将后者显式转换为字符串,例如

"(" + str(leftchild) + ", " + str(rightchild) + ")"

或者,更易读,

"(%i, %i)" % (leftchild, rightchild)
于 2013-11-05T15:35:07.807 回答
0

默认情况下,当您使用它时,input它总是一个字符串输入

x = input("Type an integer to output its binary trees: ")
print ("\nYou entered " + str(x))

所以没有必要再次转换它!

在这里使用.format()

newset.add("{0} {1} {2} {3}".format(r"(", leftchild, rightchild, r")"))

但是上面的一个不会维护数据结构!

如果您想保留数据结构,请使用,

newset.add(tuple(leftchild, rightchild))
于 2013-11-05T15:37:55.107 回答