🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

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

Q&A

解決済

2回答

11366閲覧

python3で標準入力の値を使って計算したい場合について

bonji

総合スコア37

Python 3.x

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

0グッド

0クリップ

投稿2018/08/14 16:14

#実現したい事
標準入力から受け取った数値を使って計算をしたい。

#実際のコード

python3

1i = int(input()).rstrip().split(" ") 2#iを表示 3print(int(i)) 4#標準入力(12 45)からの値を使って計算する 5i1 = i[0]*45 6i2 = i[1]*10 7print(i1+i2)

#この時のエラーメッセージ
Traceback (most recent call last):
File "Main.py", line 5, in <module>
i = int(input()).rstrip().split(" ")
ValueError: invalid literal for int() with base 10: '12 45'

#intを消してみると
Traceback (most recent call last):
File "Main.py", line 7, in <module>
print(int(i))
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

このようになってしまいます。エラーメッセージの意味もよくわからないのでデバックできません。
回答の程よろしくお願い致します。
※split()関数は標準入力を文字列として分割するのですよね?

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

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

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

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

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

guest

回答2

0

python3

1data = input().strip().split() 2print(data) 3 4i1 = int(data[0]) * 45 5i2 = int(data[1]) * 10 6print(i1, i2) 7print(i1 + i2)

実行例
イメージ説明

エラーメッセージは、辞書を引いて和訳するか、 google 翻訳で和訳してみてください。
google 翻訳 https://translate.google.co.jp/ をしてみるとこうなります。
イメージ説明

投稿2018/08/14 21:05

katoy

総合スコア22324

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

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

0

ベストアンサー

split()関数は標準入力を文字列として分割するのですよね?

概ね、はい。標準入力が絡んでいるのはinputの方ではありますが。

Python

1>>> input().split() 212 34 3['12', '34'] 4>>> 5>>> '12 34'.split() 6['12', '34'] 7>>> 8>>> s = '12 34' 9>>> s.split() 10['12', '34']

12 34のような入力を上手く捌くには、
まず分割してからそれぞれをintにキャストしないといけません。

Python

1>>> ab = input().split() 212 34 3>>> ab 4['12', '34'] 5>>> 6>>> int(ab[0]) 712 8>>> int(ab[1]) 934

なお、次のように書くこともできます。

Python

1>>> a, b = map(int, input().split()) 212 34 3>>> 4>>> a 512 6>>> b 734

エラーの再現

i = int(input()).rstrip().split(" ")
...
ValueError: invalid literal for int() with base 10: '12 45'

カッコの対応がおかしく、int(input())を先に処理しようとしてしまっています。

Python

1>>> int(input()) 212 34 3Traceback (most recent call last): 4 File "<stdin>", line 1, in <module> 5ValueError: invalid literal for int() with base 10: '12 34'

intを消してみると
...
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

先にも述べたように、リストの各要素をintにキャストしてやらねばいけないのです。

Python

1>>> ab = input().split() 212 34 3>>> 4>>> ab 5['12', '34'] 6>>> 7>>> int(ab[0]) 812 9>>> int(ab) 10Traceback (most recent call last): 11 File "<stdin>", line 1, in <module> 12TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

リストはintに直せないよ、とメッセージに書いてありますね。


エラーメッセージの意味もよくわからないのでデバックできません。

TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
『型エラー: int()の引数は文字列かバイト列、数値でなくてはならない。リストじゃダメよ』

投稿2018/08/14 16:18

編集2018/08/14 16:49
LouiS0616

総合スコア35668

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

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

bonji

2018/08/16 05:15

回答ありがとうございます。教えていただいた方法で実行した結果、上手くできました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問