バグあり!独学コンピューターサイエンティスト 第2部 第10章のサンプルプログラム
独学コンピューターサイエンティスト 第2部 第10章 では、連結リストのサンプルプログラムで整数と文字列のデータを扱っていますが整数データだと __str__ メソッドが落ちます。
以下は、 __str__ メソッドをデバッグした p180 から始まるサンプルプログラムです。
class Node:
def __init__(self, data, next = None):
self.data = data
self.next = next
class LinkedList:
def __init__(self):
self.head = None
def append(self, data):
if not self.head:
self.head = Node(data)
return
current = self.head
while current.next:
current = current.next
current.next = Node(data)
def __str__ (self):
data_list = []
node = self.head
while node is not None:
data_list.append(str(node.data)) # デバッグ! オリジナルは ⇒ data_list.append(node.data)
node = node.next
return "\n".join(data_list)
def search(self, target):
current = self.head
while current:
if current.data == target:
return True
else:
current = current.next
return False
a = LinkedList()
a.append('A')
print(a) # 文字列 Σd(≧▽≦*)OK!!
b = LinkedList()
b.append(1)
print(b) # 整数 Σd(≧▽≦*)OK!!
出力結果
A
1
【 追記 2023-04-04 】
落ちるオリジナルのサンプルプログラムを示さないのは不親切だと思ったので追記します。
以下は、出版社のサイトからダウンロードしたサンプルプログラム 'p180-p181.py' の最後に 'print(a_list)' を追加したプログラムとその出力結果です。
class Node:
def __init__(self, data, next = None):
self.data = data
self.next = next
class LinkedList:
def __init__(self):
self.head = None
def append(self, data):
if not self.head:
self.head = Node(data)
return
current = self.head
while current.next:
current = current.next
current.next = Node(data)
def __str__ (self):
data_list = []
node = self.head
while node is not None:
data_list.append(node.data)
node = node.next
return "\n".join(data_list)
def search(self, target):
current = self.head
while current:
if current.data == target:
return True
else:
current = current.next
return False
import random
a_list = LinkedList()
for i in range(0, 20):
j = random.randint(1, 30)
a_list.append(j)
print(j, end=" ")
print(a_list.search(10))
print(a_list) # バグを確認する為に追加!
出力結果
gundam@penguin:~/python$ python3 p180-p181.py
16 21 17 7 2 8 30 4 5 3 5 25 22 26 28 12 10 3 3 15 True
Traceback (most recent call last):
File "/home/gundam/python/p180-p181.py", line 47, in <module>
print(a_list) # バグを確認する為に追加!
File "/home/gundam/python/p180-p181.py", line 25, in __str__
return "\n".join(data_list)
TypeError: sequence item 0: expected str instance, int found
gundam@penguin:~/python$
#日経BP
#独学コンピューターサイエンティスト #レビュー
#独CS #selftaughtcoder
#清水川貴之 さん
#CoryAlthoff さん
#Python #Python3
#バグ #bug