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

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

新規登録して質問してみよう
ただいま回答率
85.47%
リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

Python

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

Q&A

3回答

601閲覧

リストから要素を取り出す際にint型だから取り出せない、と出てしまう

nono_python

総合スコア5

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

Python

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

0グッド

0クリップ

投稿2019/12/07 08:58

編集2019/12/07 09:06

前提・実現したいこと

某プログラミング練習サイトでの問題でエラーが発生してしまい先に進めません。

↓下記の与えられた値を読み込み、
3
SET 1 10
SET 2 20
ADD 40

↓下記の条件の通りに計算し
・SET i a : 変数 i に値 a を代入する (i = 1, 2)
・ADD a :「変数 1 の値 + a」を計算し、計算結果を変数 2 に代入する
・SUB a :「変数 1 の値 - a」を計算し、計算結果を変数 2 に代入する

n個(入力値の1行目。ここでは3)の命令を入力される順に実行し終わった後の、変数 1, 2 の値を半角スペース区切りで 1 行に出力する、という問題です。

発生している問題・エラーメッセージ

Traceback (most recent call last): File "Main.py", line 10, in <module> if order[0] == "SET" and order[1] == 1: TypeError: 'int' object is not subscriptable

該当のソースコード

Python3

1# coding: utf-8 2hensu1 = 0 3hensu2 = 0 4 5num = int(input()) 6for i in range(num): 7 order = input().split(" ") 8 9for order in range(num): 10 if order[0] == "SET" and order[1] == 1: 11 hensu1 = order[2] 12 elif order[0] == "SET" and order[1] == 2: 13 hensu2 = order[2] 14 elif order[0] == "ADD": 15 hensu2 = hensu1 + int(order[1]) 16 elif order[0] == "SUB": 17 hensu2 = hensu1 - int(order[1]) 18 19print(str(hensu1),end=" " + str(hensu2))

試したこと

intは添字表記に対応していないということで、10行目の変数 order の型を調べてみましたが「リスト」と出ますし、インデントの外で出力してみてもちゃんとリストの中身が表示されます。それ以外に添字はつけていないのですが…。
初心者なのでこれ以外のデバッグ方法は思いつきません。よろしければ間違いを指摘して頂きたいです。何卒よろしくお願い致します。

補足情報(FW/ツールのバージョンなど)

https://paiza.jp/challenges/91/showhttps://paiza.jp/challenges/91/show

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

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

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

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

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

hayataka2049

2019/12/07 09:03

>某プログラミング練習サイトでの問題 出典を示してください。
hayataka2049

2019/12/07 09:14

示されたURLから判断するに、スキルチェック問題ですね。paizaのルールに反することですので、この質問は取り下げることをおすすめします。
shiracamus

2019/12/07 12:16 編集

(回答欄に移動しました)
guest

回答3

0

input().split() した結果はすべて文字列ですよ。
数値にするならint変換しないといけません。

py

1>>> "SET 1 10".split() 2['SET', '1', '10'] 3>>> "SET 1 10".split()[1] 4'1' 5>>> "SET 1 10".split()[1] == 1 6False 7>>> "SET 1 10".split()[1] == '1' 8True 9>>> int("SET 1 10".split()[1]) == 1 10True

投稿2019/12/07 12:15

編集2019/12/07 12:16
shiracamus

総合スコア5406

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

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

0

原因はこれです。繰り返し変数に既存の変数を指定しているからです。

python

1for order in range(num):

こうした方が良い

python

1for o in order:

また、これだとorderが更新されていくだけです。

python

1for i in range(num): 2 order = input().split(" ")

こうした方が良い

python

1order = [input().split(" ") for _ in range(num)]

投稿2019/12/07 09:13

編集2019/12/07 09:49
ChaosRepainter

総合スコア108

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

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

0

2箇所大きな間違いがありそうです


1箇所目

これだと、変数 order には3回値が代入されてしまい、最後の1つ(['ADD', '40'])しか残りません

SET 1 10 と SET 2 20 は 上書きされて消えてしまいます。

python

1for i in range(num): 2 order = input().split(" ")

2箇所目

num = 3 だとすると、この場合 order には 0, 1, 2 が代入されています

python

1for order in range(num): 2 # 1loop目であれば、このorderには0が入っている...なので、当然添え字は使用できない 3 if order[0] == "SET" and order[1] == 1: 4 ...処理

まずは、この2点を解決する必要があると感じました。

問題ということなので、答えは書きませんでした。
もう少し挑戦してみて、どうしてもわからなければ、質問を追記したり、コメントを記載してみてもらえたらと思います。

投稿2019/12/07 09:08

編集2019/12/07 09:10
siruku6

総合スコア1382

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問