3

私のコードは、入力後に二分木の数を決定して表示することになっています。
エラーが発生し続け、can't convert int object to str implicitly修正方法がわかりません。Python の 3.0 以下のバージョンで簡単に動作するので、助けてください。私はまだ 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 に答える