質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

unsupported operand type(s) for *: 'NoneType' and 'int'について

suugaku_nyumon
suugaku_nyumon

総合スコア37

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0リアクション

0クリップ

22624閲覧

投稿2018/12/11 14:43

質問内容

https://teratail.com/questions/163238

前の質問がこちらでコードを短くしようと試みておりましたが、関数を定義した際に新たに問題が起きました。

条件によって式の係数が変わるので予め、例えば30行目ではdef infect_Cattle(m)のように係数を定義して、条件によって0.75か0.25か変わるようにしておりました。

そして起動してみたのですが以下のエラーメッセージが出てきました。数字と数字を掛け合わせているはずなのにNoneTypeが出ていて困っています。これはどこが問題なのでしょうか?

コード

python3

from tkinter import * import time import tkinter as tk import random import math #配列の宣言 def array2(N1,N2): return [[0 for j in range(N2)]for k in range(N1)] def array3(N1,N2,N3): return [array2(N2,N3)for k in range(N1)] #セルの初期設定 def initdt(): A=array3(1000,31,31) B=array3(1000,31,31) for i in range(1,31): for j in range(1,31): if (i == 15 and j == 15): A[0][i][j] = 1 B[0][i][j] = 1 else: r_i=random.random() if (r_i <= 0.5): A[0][i][j] = 2 B[0][i][j] = 0 if (r_i > 0.5): A[0][i][j] = 4 B[0][i][j] = 0 return A , B def infect_Cattle(m): if m == 1 or m == 2: return 0.75 if m == 3 or m == 4: return 0.25 def infect_Bear(m): if m == 1 or m == 2: return 0.10 if m == 3 or m == 4: return 0.40 #セルオートマトンの実行 def execCell(A,B,i1): i2 = 1 + i1 for i in range(1,30): for j in range(1,30): alpha = 0.50 a = 0.60 if A[i1][i][j] == 1: B[i2][i][j] = (1 - alpha) * B[i1][i][j] if B[i2][i][j] >= 0 and B[i2][i][j] < a: A[i2][i][j] = 2 if B[i2][i][j] >= a and B[i2][i][j] <= 1.0: A[i2][i][j] = 1 if A[i1][i][j] == 2: B[i2][i][j] = (1 - alpha) * B[i1][i][j] + infect_Cattle(A[i1][i-1][j]) * B[i1][i-1][j] + infect_Cattle(A[i1][i+1][j]) * B[i1][i+1][j] + infect_Cattle(A[i1][i][j-1]) * B[i1][i][j-1] + infect_Cattle(A[i1][i][j+1]) * B[i1][i][j+1] if B[i2][i][j] >= 0 and B[i2][i][j] < a: A[i2][i][j] = 2 if B[i2][i][j] >= a and B[i2][i][j] <= 1.0: A[i2][i][j] = 1 if B[i2][i][j] > 1.0: A[i2][i][j] = 1 B[i2][i][j] = 1.0 if A[i1][i][j] == 3: B[i2][i][j] = (1 - alpha) * B[i1][i][j] if B[i2][i][j] >= 0 and B[i2][i][j] < a: A[i2][i][j] = 4 if B[i2][i][j] >= a and B[i2][i][j] <= 1.0: A[i2][i][j] = 3 if A[i1][i][j] == 4: B[i2][i][j] = (1 - alpha) * B[i1][i][j] + infect_Bear(A[i1][i-1][j]) * B[i1][i-1][j] + infect_Bear(A[i1][i+1][j]) * B[i1][i+1][j] + infect_Bear(A[i1][i][j-1]) * B[i1][i][j-1] + infect_Bear(A[i1][i][j+1]) * B[i1][i][j+1] if B[i2][i][j] >= 0 and B[i2][i][j] < a: A[i2][i][j] = 4 if B[i2][i][j] >= a and B[i2][i][j] <= 1.0: A[i2][i][j] = 3 if B[i2][i][j] > 1.0: A[i2][i][j] = 3 B[i2][i][j] = 1.0 #セルの位置決めとIDの設定 def drawCell(canvas,A,k): x2=0 CID=array2(31,31) for i in range(1,30): x1=x2 x2=x1+20 y2=0 for j in range(1,30): y1=y2 y2=y1+20 CID[i][j]=canvas.create_rectangle(x1,y1,x2,y2,fill='black') return CID #セルの色設定 def modifyCell(canvas,A,k,CID): CL=['black','#ffffff','#ff0000','#ffffff','#0000ff'] for i in range(1,30): for j in range(1,30): canvas.itemconfig(CID[i][j],fill=CL[A[k][i][j]]) canvas.itemconfig(CID[i][j],outline=CL[A[k][i][j]]) #Tk初期設定 def initTk(): tk=Tk(); tk.title("2D Cell Automaton"); tk.resizable(0,0) return tk #画面キャプチャ用 def leftMouseDown(event): global canvas, A,k,CID modifyCell(canvas,A,k,CID) execCell(A,B,k) #実行メイン A,B=initdt() root=initTk() canvas=Canvas(root,width=580,height=580,highlightthickness=0) canvas.pack() CID=drawCell(canvas,A,0) k=0 def animate(): global k modifyCell(canvas, A, k, CID) execCell(A,B,k) k = 1 + k root.after(1000, animate) root.after(1000, animate) root.mainloop()

エラーコード

Exception in Tkinter callback Traceback (most recent call last): File "C:\Python37\lib\tkinter\__init__.py", line 1705, in __call__ return self.func(*args) File "C:\Python37\lib\tkinter\__init__.py", line 749, in callit func(*args) File "2d_infect_alter.py", line 150, in animate execCell(A,B,k) File "2d_infect_alter.py", line 56, in execCell B[i2][i][j] = (1 - alpha) * B[i1][i][j] + infect_Cattle(A[i1][i-1][j]) * B[i1][i-1][j] + infect_Cattle(A[i1][i+1][j]) * B[i1][i+1][j] + infect_Cattle(A[i1][i][j-1]) * B[i1][i][j-1] + infect_Cattle(A[i1][i][j+1]) * B[i1][i][j+1] TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。