私はシミュレーターを書くように依頼されました。最終的な目標は、おそらく 15 個ほどのローラーのチェーンの最後にあるシリンダーにどれだけのインクがたまるかを確認することです。現在、ローラーを定義する辞書をセットアップしようとしています。これから、ユーザー入力「roller_diameter」を受け取り、指定された直径と固定直径の比率を見つけ、これを整数の「セグメント」に変換する関数を書きたいと思いました。私はプログラマーではなく (インターネット リソースを使用して Python[2.7] を学習しています)、TypeError: can't multipy sequence by non-int type 'float' に苦労しています。これは些細な問題だと確信しています。関連する回答を見てきましたが、具体的に何が間違っているのか理解できませんでした...どんな提案も大歓迎です。
Rubber = True
Copper = False
CW = 1
ACW = -1
num_rollers = 4
plate_diameter = 406.4
rollers = [{} for i in range(num_rollers)]
rollers[0] = {'top_seg': 0, 'roller_diameter': [], 'segments': [], 'material': Copper, 'direction': ACW, 'ink': []}
rollers[1] = {'top_seg': 0, 'roller_diameter': [], 'segments': [], 'material': Rubber, 'direction': CW, 'ink': []}
rollers[2] = {'top_seg': 0, 'roller_diameter': [], 'segments': [], 'material': Copper, 'direction': ACW, 'ink': []}
rollers[3] = ['top_seg': 0, 'roller_diameter': [], 'segments': [], 'material': Rubber, 'direction': CW, 'ink': []}
R = rollers[i]
def roller_data():
global roller_diameter
roller_diameter = float(raw_input("Enter the roller diameter" + str(i) + ': '))
for i in range(num_rollers):
roller_data()
R['segments'] = int(round(rollers[3]['segments']*roller_diameter/plate_diameter))
R['angle'] = (360.0/R['segments'])
print rollers[3]['segments']
トレースバックは次のとおりです。
Traceback (most recent call last):
File "\\datasvr\users\rioliver\Python2.7\dict_test_v2.py", line 24, in <module>
R['segments'] = int(round(rollers[3]['segments']*roller_diameter/plate_diameter))
TypeError: can't multiply sequence by non-int of type 'float'
このコードを実行すると、直径に何を入力しても問題はありません (私は 85、95、110、120 を使用しています) が、どの数値を使用しても違いはありません。任意の数値 (整数または浮動小数点) を取り、浮動小数点を丸めたいと思います。