• 締切済み

progateを用いて、pythonの勉強を始めた

progateを用いて、pythonの勉強を始めたばかりです。 どうしても腑に落ちない箇所がありまして、ご質問いたしました。 items = {' apple ' : 100, ' banana':200} for item_name in items : print( item_name + 'は1個' + str( items [item_name]+ '円です') という箇所なのですが、この問題のヒントのところに 「果実のリストは items 、果実の名前は item_nameという変数に代入されているので、item[item_name]とすることで、果実一個の値段を取得できます。 と書いてありました。 なぜ、[item_name]とするだけで、数値が取得できるのでしょうか。 for式の特徴がいまいち、頭に入っていないのかもしれません。 よろしくお願いいたします。

  • Python
  • 回答数1
  • ありがとう数1

みんなの回答

  • evawo
  • ベストアンサー率0% (0/0)
回答No.1

まず、items[item_name] で一つの意味になるので、区切るところを間違えないようにしてくださいね。 1行目のitemsの代入で、「ディクショナリ」や「辞書」と呼ばれるものを使っています。 まずは、これについて検索して調べてみて下さい。よくわからなければ、「連想配列」や「HashMap」などのキーワードでも検索してみて下さい。わかりやすい説明ページが見つかると思います。 このディクショナリで、文字列の名前をキーにした「値の保持」ができます。 つまり、appleという文字列をキーに、100の値を保持し、 bananaという文字列をキーに、200の値を保持します。 そのディクショナリをitemsとして代入しています。 そして、そのitemsに保持した値を参照する場合には、items[キー文字列] で参照します。 試しに、プログラムの最後の行に、次の行を書き足して実行してみて下さい。 print(items['apple']) 保持した100の値が表示されるはずです。 ここまで理解できたら、あとはfor文です。 item_nameには、キーの文字列が繰り返すたびに、順次代入されます。 このプログラムのケースでは、'apple'、'banana'の2つのキーの分だけループします。 つまり、1回目のループで、item_nameが'apple'になり、2回目のループでitem_nameが'banana'になります。 これでこのプログラムが理解できたのではないでしょうか。

関連するQ&A

  • Pythonのanyって何?

    下のPythonのプログラムにおいて、any()とは何をしているんでしょうか。たしかに取ると動かなくなります。 $ cat fruits.txt Banana Orange Navel Strawberry Apple $ cat fruits.txt | python -c 'import sys; any(print(l,end="") for l in sorted(sys.stdin))' Apple Banana Navel Orange Strawberry $

  • Pythonの変数等について

    Pythonで以下のコードについておしえてください 1,2,3、4について この右辺と左辺をあわせたものは変数ですか?それともどちか片方だけが変数ですか? 5について 5,print("支払金額は" + str(total_price) + "円です") カッコの中は引数ですよね? 引数の中にstr(total_price)という関数が入っているということですか? 1,apple_price = 200 2,kazoeru_kazu = input("りんごの数を入力してください") 3,count = int(kazoeru_kazu) 4,total_price = apple_price * count 5,print("支払金額は" + str(total_price) + "円です")

  • VBAからPythonを動かしたいのですが…

    いつもお世話になっております。 icevainと申します。 python超初心者です。 【質問】 『VBAでPythonを動かす』という興味のあるサイトを見つけました。 https://qiita.com/O_LUPAN/items/1ceb5c950ff40f3558ab サイトのpythonコード #ここから import sys def sum(suji1, suji2): return suji1 + suji2 if __name__ == "__main__": argv = sys.argv suji1 = str(argv[1]) suji2 = str(argv[2]) total = sum(suji1, suji2) print(total) #ここまで サイトのpythonコードを無理やり変更して、 #ここから import sys def sum(suji1, suji2): rst="OK" return rst if __name__ == "__main__": argv = sys.argv suji1 = str(argv[1]) suji2 = str(argv[2]) total = sum(suji1, suji2) print(total) #ここまで OKがかえってくると思ったのですが、 0がかえってきてしまいます。 OKをかえすにはどうすればよいのかわかりません。 お分かりの方おりましたらご協力お願い致します。

  • 配列をhtmlで参照

    javascriptで作成した配列の要素をhtmlのセレクトボックスの値として 参照したいんですが、どのようにすればいいんでしょうか? <html><body> <select name="セレクト"> <option >セレクトボックス <option value="1st item">1st item //ここに配列items[]の値を代入したい <option value="2nd item">2nd item <option value="3nd item">3nd item <option value="4nd item">4nd item <option value="5nd item">5nd item </select><br> <script language="Javascript"> function Item(name, count) { this.name = name this.count = count } function cmp_func(lhs, rhs) { return rhs.count - lhs.count } items = new Array(10) items[0] = new Item("apple", 12) items[1] = new Item("orange", 34) items[2] = new Item("banana", 15) items[3] = new Item("grape", 99) items[4] = new Item("strawberry", 7) items[5] = new Item("rasberry", 55) items[6] = new Item("blueberry", 22) items[7] = new Item("lemon", 4) items[8] = new Item("nable", 33) items[9] = new Item("pear", 44) items.sort(cmp_func) for (i=0; i<items.length; i++) document.write(items[i].count, ":", items[i].name,"<br>") </script></body></html> たびたび質問すいませんが、よろしくご教授願

  • Python リスト内の要素取り出しについて

    ProgateでPythonを1から学んでいる初心者です。 現在、じゃんけんゲーム作成のセクションに取り組んでいるのですが、その中でリストの要素取り出しについて疑問点があるため質問いたしました。 詳しくは画像を参照いただければ分かりやすいかと思うのですが、 ------------------------------ def print_hand(hand, name='ゲスト'): # 変数handsに、複数の文字列を要素に持つリストを代入してください hands = ("グー", "チョキ", "パー") # リストhandsを用いて、選択した手が出力されるように書き換えましょう print(name + 'は' + hands[hand] + 'を出しました') ------------------------------- という点に関して、なぜ hands[hand] でリスト「hands」内の要素が取り出せるのか分かりません。 この時点では、「hand」が「hands」内の要素に対応していることは、明示されていなくないですか? グーが0、チョキが1、パーが2に対応することは分かっているのですが。。。 ずぶの素人質問で申し訳ございませんが、ご教授お願いいたします。

  • [python] で packの方法を教えてください

    pythonで、バイナリファイルを扱おうと思います。 固定長の変数に、文字列と整数を代入する予定です。 環境は、Linuxのコマンドラインで使用します。 ---------------------------------- C言語で書くと、次のように成ります。 char[32] str; int [8] a; str = "test hoge"; a = 123; sprintf ("%32s%08d", str, a); //バイナリデータとして扱う ---------------------------------- 上記のように、文字列や数値をバイナリデータにしたいと思います。 最終的には、バイナリデータ・ファイルを生成します。 この場合、packを使えば出来そうですが、例題がなかなか見つからず困っています。 何か良い方法を知りませんか。 よろしくお願いします。 m(_ _)m

  • python プログラミング vim

    #!/usr/bin/env python #vim: fileencoding=utf-8 from math import* import sys outfp=open('test.dat','w') outfq=open('ab.dat','w') for line in open('para.dat','r'): items=line.split('\t') s=2/float(items[0]) u=float(items[1])-5+log(s/100) outfp.write(str(s)) outfq.write(str(u)) outfp.close() outfq.close() ////para.dat//// 1 2 1 3 として、プログラムを実行したのですが、ファイルに出力した時に、 para.datの2列目(1 3)の計算した結果しか、ファイルに書き込まれてないのですが、 どうすれば、すべて反映されて、出力ファイルに結果が出せるのでしょうか。 よろしくお願いします。

  • Pythonで(基数に従って)3桁までの数字を表示

    Pythonに関する質問です。 まず、変数baseに基数として10を代入して、変数digitsに{0,1,2,3,4,5,6,7,8,9}を代入します。これら二つの変数とリスト内包表記(list comprehension)を使って、3桁までの数字をすべて表示するにはどうしたらいいのでしょうか?答えをずばり教えてください。 また、どんな基数でも動作しないといけなくて、例えば、基数が2でdigitsが{0,1}の場合だと、結果は{0,1,2,3,4,5,6,7}になるようです。これは {000, 001, 010, 011, 100, 101, 110, 111} を10進数で表示したものです。 digitsを3つに分けてもいいのなら、以下の感じだと思っています: >>> {digits3 * base**2 + digits2 * base**1 + digits1 * base**0 for base in {10} for digits3 in {0,1,2,3,4,5,6,7,8,9} for digits2 in {0,1,2,3,4,5,6,7,8,9} for digits1 in {0,1,2,3,4,5,6,7,8,9} } {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ~中略~ 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999} でも、digitsを分けない方法は分かりません。いろいろ試しました: >>> {base*digits for base in {100,10,1} for digits in {0,1,2,3,4,5,6,7,8,9} } {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 400, 20, 900, 30, 800, 40, 300, 50, 60, 70, 200, 80, 600, 90, 100, 700, 500} >>> {base**2*digits+base**1*digits+base**0*digits for base in {10} for digits in {0,1,2,3,4,5,6,7,8,9} } {0, 999, 777, 555, 333, 111, 888, 666, 444, 222} 2進数でもやってみましたが、よく分かりません: >>> {base**2*digits+base**1*digits+base**0*digits for base in {2} for digits in {0,1} } {0, 7} >>> {base*digits for base in {2**2,2**1,2**0} for digits in {0,1} } {0, 1, 2, 4} やっぱり、digitsが別々に三回出てこないと、3桁の掛け合わせが出来ないと思うんですよね・・・。Pythonが得意な方、どうか教えて下さい。お願いします。

  • どのデータ型で宣言すればいいのでしょうか?

    VBAです。 http://okwave.jp/qa/q1318017.html を参考に、現在パソコンに入ってるプリンタ名の一覧を取得したいのですが ***************************************** Sub アクティブプリンターを取得する() Set Win = CreateObject("Shell.Application") For Each Obj_Item In Win.Namespace(4).Items Debug.Print Obj_Item.Name Next End Sub ***************************************** を実行すると、 「Win」と「Obj_Item」が 「変数が定義されていません。」というコンパイルエラーになってします。 なので、 ***************************************** Dim Win, Obj_Item As データ型 ***************************************** で、変数を宣言すればいいと思うのですが、どのデータ型で宣言すればいいのでしょうか? ご回答よろしくお願いします。

  • char型配列をint型に代入するには

    char型の配列(文字列)の各要素ににそれぞれ数字が一つ入れました。 str[0] = '0' str[1] = '1' : str[5] = '5' これをfor文を使ってint型変数に入れたい代入するにはどうれればいいですか? str[0] → dat1 str[1] → dat2 : str[5] → dat5

専門家に質問してみよう