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

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

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

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

Q&A

解決済

2回答

606閲覧

標準入力を出力したい

urazome

総合スコア26

Python 3.x

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

0グッド

0クリップ

投稿2018/08/14 05:07

ーーーーーーーーーー問題ーーーーーーーーーーーーーーーーーーーーーー
標準入力で出力するアイテム数と複数行のアイテム名の入力があります。
それを元に、items_imgで定義された画像を改行せず順番に出力します。
画像の出力にはimgタグを使い、src属性に画像のファイル名を指定します。
※標準入力で与えられるアイテム名は、items_imgに無いアイテムは
出てこないものとします。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

ーーーーーーーー入力される値ーーーーーーーーーーーーーーーーーーーー

回復薬

クリスタル
クリスタル


ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

ーーーーーーーーー質問ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
1.以下のコードを考えたのですが、エラーが出ました。print(i)を出力したときは、入力される値が順番に出たため、成功すると思いました。どうしてエラーが出でしまうでしょうか。

2.模範解答にはitems_img[]の[]の中身に""が入っていませんでした。なぜエラーが出ないのですか。これではitems_img["剣"]ではなく、items_img[剣]になってしまいませんか。模範解答は、自分の回答の下に載せます。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

python

1・・・・・・・自分の回答・・・・・・・・・・・・・・・・・・・・・・ 2# 画像用辞書 3items_img = { 4 "剣" : "http://paiza.jp/learning/images/sword.png", 5 "盾" : "http://paiza.jp/learning/images/shield.png", 6 "回復薬" : "http://paiza.jp/learning/images/potion.png", 7 "クリスタル" : "http://paiza.jp/learning/images/crystal.png" 8} 9num=int(input()) 10import sys 11for i in sys.readlines(): 12 print("<img src='"+items_img["i"]+">'") 13・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 14 15・・・・・・・・・・・模範解答・・・・・・・・・・・・・・・・・・・・ 16# 出力するアイテム数を変数に代入 17item_cnt = int(input()) 18 19# 標準入力にあるアイテムを出力する 20while item_cnt > 0: 21 item = input() 22 print("<img src = '" + items_img[item] + "'>") 23 item_cnt = item_cnt - 1 24・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

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

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

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

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

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

guest

回答2

0

変数と定数の違いについて理解不足があるように見受けられます。

これではitems_img["剣"]ではなく、items_img[剣]になってしまいませんか。

items_img[item] とあります。仮にitemの値がなら、これはitem_img["剣"]としたのと同じことです。item_img[剣]にはなりません。

一方、あなたのコードですが、

print("<img src='"+items_img["i"]+">'")

"i"の部分ですが、これでは文字列定数の"i"そのものです。該当する値が存在しないので、エラーになるのは当然でしょう。変数としてのiを使いたいのだったら引用符をつけてはいけません。こういったルールはpythonに限らず多くの言語で普通に存在するもので、初歩の初歩と言えるでしょう。今のうちによく入門書を読んで理解しておくことをお勧めします。

投稿2018/08/14 06:07

KojiDoi

総合スコア13671

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

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

urazome

2018/08/15 02:06

何回も練習して、はやくこのルールに慣れたいです。ありがとうございました!
guest

0

ベストアンサー

items_img["i"]

これでは、"i" という文字列を探してしまいます
当然、それはないのでエラーになりますね

i は文字列(のはず)だから、
items_img[i]
としないとだめです

# i のナカミは、"剣"なのです

投稿2018/08/14 05:53

y_waiwai

総合スコア87774

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

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

urazome

2018/08/15 02:22

なるほど! でも、items_img[i]として出力しても、エラーが出ました。これはなぜでしょうか。
y_waiwai

2018/08/15 02:26

i のナカミを確認してみましょう "剣"、"盾"、"回復薬"、"クリスタル"のどれかでないと、当然エラーになります この場合は、i のナカミがitems_imgに存在するかどうかのチェックが必要となりますね
urazome

2018/08/15 02:33

KeyError: '回復薬\n' と出ました。でも、items_imgに回復薬あります。。。よくわかりません。
y_waiwai

2018/08/15 02:38

ああ、後尾に\nが付いてるからですね。 コンソール入力の改行のコードが紛れ込んでます i=i.trim(); しておけば、i に入ってる前後の空白や改行を除去してくれます # trim という関数がなにをしてるかしらべてみよーねっ
urazome

2018/08/15 03:05

ありがとうございました!
LouiS0616

2018/08/15 03:42

@y_waiwai さん それは str.trim じゃなくて str.strip じゃないでしょうか。
y_waiwai

2018/08/15 04:22

あ、そだった。。 コメントありがとうございます。。 i = trim(i) ですね # C#とはちがうのだよC#とは
LouiS0616

2018/08/15 04:28

trim関数も標準では無いですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問