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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

5回答

6604閲覧

pythonでfor i in range(1.0,4.0,0.01): とすると、'float' object cannot be interpreted as an integerというエラー

ruei

総合スコア284

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/12/05 05:55

pythonで下記のようなfor文を回そうとしたところエラーが出ました。

for i in range(1.0,4.0,0.01): pass

エラー内容は

TypeError: 'float' object cannot be interpreted as an integer

です。

原因や解決方法のわかる方、ご教示ください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

range関数には実数(浮動小数点数)は使えません。数えられないからです。

Python

1for int_i in range(100,400,1): 2 i = int_i / 100.0 3 ~~~

投稿2018/12/05 06:07

otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

range関数には、浮動小数を渡すことができないのです。


代替案は三つです。

一番目の方法だと、現状のコードを活かせます。
二番目の方法だと、繰り返し回数を制御できます。
三番目の方法だと、サードパーティモジュールの導入が不要です。

どちらにせよ、浮動小数を扱う時点で誤差の発生は避けられませんが。

投稿2018/12/05 06:01

編集2018/12/05 06:02
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

英語のページですが、頑張って読んでみてください。
(説明文を無視して、プログラムコードを読んだり試したりするだけでも良いと思います)

Python range for float numbers with Examples
https://pynative.com/python-range-for-float-numbers/

投稿2018/12/05 13:45

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

コードを書きたいので新しく回答を作りますが、otnさんの回答か、LouiS0616さんの回答のnumpy.linspaceを使うのが正着です。
1.0から始めて0.01ずつ足すやり方では、誤差を積み上げてしまうからです。
整数値を刻んでそれを割る、という順番にするべきです。

>>> import numpy as np >>> for i in range(300)[-10:]: ... print(1.0 + i / 100) ... 3.9 3.91 3.92 3.93 3.94 3.95 3.96 3.97 3.98 3.99 >>> for x in np.linspace(1.0, 3.99, 300)[-10:]: ... print(x) ... 3.9 3.91 3.92 3.93 3.94 3.95 3.96 3.97 3.98 3.99 >>> for x in np.arange(1.0, 4.0, 0.01)[-10:]: ... print(x) ... 3.9000000000000026 3.910000000000003 3.9200000000000026 3.9300000000000024 3.9400000000000026 3.950000000000003 3.9600000000000026 3.9700000000000024 3.9800000000000026 3.990000000000003

numpy.linspaceの実装を見ると、要は、

np.arange(300) * 0.01 + 1.0

を計算しているようなので、これでもいいかと。

投稿2018/12/05 06:46

quickquip

総合スコア11038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

int型しか回せません。
float型は回せない

投稿2018/12/05 05:59

yamato_user

総合スコア2321

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問