2016-10-09 8 views
2

I(6桁長いので、123456むしろちょうど1より)入力をユーザ整数たいし、リスト、[1,2,3,4,5,6]にその入力を変換します。整数の入力文字列をリストに変換し、次にPythonのintに変換しますか?

user_input = list(input("Please enter an 8 digit number") 
numbers = [int(i) for i in user_input] 

私は数字のリストで、数学的なものを実行できるようにしたいが、私はエラーを取得しておく「intは反復可能ではありません」:

は、私はこれを試してみました。率直に言うと、私は何をやっているのか、「numbers = [...]」が必要であるかどうか、あるいはそれがちょうど numbers = user_inputであることを完全にはわかっていません。 numbers = [i for i in user_input]を試しても同じエラーが発生します。

.split(",")を使用するためにループを実行して各番号をユーザーから取得するか、またはそれらの間にカンマを使用するように求めることもできますが、ユーザー。

編集:私はバージョン間の変更を行っていますので、混乱してしまいました。これは2.7で書かれましたが、私はPython 3を使用しようと考えています。

+1

あなたはPython 2でいませんか?その場合は、入力 – Boud

+0

の代わりにraw_inputを使用してください。あなたの問題は、ここに示したコードではなく、別の場所にあります。 –

+0

Pythonのどのバージョン? – dawg

答えて

0

Python 2.7では、input()は整数を返します。入力を文字列として読み込むには、代わりに関数raw_input()を使用します。あるいは、Python 3に切り替えることができ、input()は常に文字列を返します。

また、あなたのソリューションは、ユーザが1つの以上の数字と数字を提供している場合には非常にきれいではありません。例えば、文字列 "123"は、[1、2、3]、[12,3]のように解釈することができます。 X_1、X_2、... x_nに関する

を次のように

きちんとしたソリューションは、スペースで区切って入力を提供するために、ユーザーを依頼することですその後はPython 3.0でコードが

lst = [int(x) for x in input().split()] 

のようになります。そして、 Pythonの2.7のための

lst = [int(x) for x in raw_input().split()] 
1

機能input

のPython 2とPythonで3でかなり異なった動作します

これはPython 2のようです。Python 2では、inputは入力したデータをPythonコードとして評価します。数字のみを入力すると、inputは1つの整数を返します。これをリストに変換することはできないため、エラーになります。

inputは安全ではないと多くの問題が発生するので、それを避けるのがベストです。代わりにraw_inputを使用してください。

user_input = raw_input("Please enter an 8 digit number: ") 

これは文字列を返します。 '12345678'

これは、リストに変換することができます。リストは文字列ごとに文字列を繰り返します。

digits = list(user_input) # e.g. ['1', '2', '3', '4', '5', '6', '7', '8'] 

しかし、それも必要ではありませんあなたが行ったように、あなたが直接行うことができます。

numbers = [int(i) for i in user_input] # e.g. [1, 2, 3, 4, 5, 6, 7, 8] 

はところで、inputのPythonの3バージョンは、Python 2 raw_inputと同じです。

関連する問題