前提・実現したいこと
20*20の文字のなかから指定された文字を探すプログラムを作っています。
TypeErrorがでてうまくいきません。
まだ途中なのですが、f1はGridの中にその文字があるか、あればその特定の位置からその文字がどちらの方向に進むのか、8方向をチェックしてその方向を示す、x,yの値を返します。
そのため、次の関数f2でx、yの値を引き継ぎたいのですが、以下のエラーが発生しています。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "C:\Users\test.py", line 47, in <module> f2('BARN',grid) File "C:\Users\test.py", line 36, in f2 x, y = f1(word,row,col,grid) TypeError: cannot unpack non-iterable bool object
該当のソースコード
Pythonここに言語名を入力
1grid = ['DWHISKEYBUNKHOUSETHA', 'NLDAVYCROCKETTEWROSA', 2 'AGUNSLINGERPCRYARWTS', 'HCSTLEPTSRIOONDSAAIK', 3 'DAADDRCHUOUTSIELSNRO', 'EMTLIEOINOSSNSTFTTRK', 4 'RINSATEEFLTGTUAKOEUC', 'INUPGMEWAFPOOLTLODPI', 5 'HEDUBRIREOOPOEESBPTH', 'RSNRSUETSLBYGHERLOAL', 6 'LHISENCTYABGADSLASRL', 'RACCESDKNJUMNSLCCTEI', 7 'IFOGEOSKBNAAUASOKEVB', 'GTWCCHRMDOHNHTCASRLD', 8 'NMPTHOOLAHASEBOLMWOL', 'OFORBAOUCKRRAPUOIAVI', 9 'ORKBOGPNSAERDITITGEW', 'LRELDDASMENRMGSLHORT', 10 'ARHEHRECIFFOTSOPENRD', 'SESUOHLOOHCSLLAHNWOT'] 11 12def f1(word,row,col,grid): 13 dir =[[-1, 0], [1, 0], [1, 1],[1, -1], [-1, -1], [-1, 1],[0, 1], [0, -1]] 14 if word[0] != grid[row][col]: 15 return False 16 for x, y in dir: 17 rd,cd = row +x, col +y 18 flag = True 19 for k in range(1,len(word)): 20 if (0<= rd < len(grid) and 21 0<= cd < len(grid[0]) and 22 word[k] == grid[rd][cd]): 23 rd += x 24 cd += y 25 #print(x,y) 26 else: 27 flag = False 28 break 29 if flag: 30 return x, y 31 return False 32 33def f2(word,grid): 34 row=0 35 col=0 36 x, y = f1(word,row,col,grid) 37 rowEnd = len(grid) 38 calEnd = len(grid[0]) 39 # Consider every point as starting point 40 # and search given word 41 for row in range(rowEnd): 42 for col in range(calEnd): 43 if f1(word,row,col,grid): 44 print("pattern found at " + str(row) + ', ' + str(col)) 45 print(x,y) 46 47f2('BARN',grid)
試したこと
f1の関数はためしたところきちんと作動して、
>>> f1('BARN',14,13,grid) (1, -1)
という形でx, yの値がTupleで返ってきました。
これをf2に引き継ぐためにはどこがいけないかよくわかりらず、このエラーをなくすためにはどこを修正すればよいのかがよくわかりません。どうぞよろしくお願いします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー