• 締切済み
  • 困ってます

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式の特徴がいまいち、頭に入っていないのかもしれません。 よろしくお願いいたします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数66
  • ありがとう数1

みんなの回答

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

まず、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 $

  • 配列を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超初心者です(3時間目)。pythonで以下のようなランダ

    python超初心者です(3時間目)。pythonで以下のようなランダム数列を生成させるにはどうしたらいいのでしょうか? 最終結果のイメージ(16進数8桁の数列x20行): 0 : c39a29eb 1 : b26cc9bb 2 : 4c494e47 ... 19: 93c85836 以下のようにコードを組んでみたのですが、 > tmp = ws.join(list) > TypeError: sequence item 0: expected string, int found のようなエラーが出てしまいます。どうやら数字を連結しようとしてるのでダメなのかな?と思っています。 ======================================== #! /usr/bin/python import random list = [] ws = "" for i in range (20): print i, ":", for j in range(8): list.append(random.randint(0,15)) tmp = ws.join(list) print tmp list = [] tmp = "" ======================================== ※ printでは必ずスペースが入ってしまうので、それを嫌う場合配列に入れて、要素を連結させなくてはならない、とwebにあったので、その方向で試してみました。 ※ また、ここではあくまでrandom を使用し、一文字(0,1,2,...E,F)づつ出力させたいと思っています。 なお、perlでは以下のように書くことができたのですが... ======================================== #! /usr/bin/perl for($i=0; $i<20; $i++){ printf ("%-02s: ", $i); for($j=0; $j<8; $j++){ printf("%x", int(rand(15)) ); } print "\n"; } ======================================== ※ んー第二言語としてpythonを学習してみていますが道のり険しそうです(やっぱrubyにしようか)... 宜しくお願い致します。

  • [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 について質問です

    私はPythonの初心者です。 今Python でCSVのファイルを読んで数値だけ(数値以外に文字列や空白などがあります)を計算処理出来なくて困っています。教えて頂けませんか? 質問は、BB.csvというファイルの数値だけの合計と平均を計算したいです。 私のコードは以下です。 # coding: utf-8 import csv import re import string DATAFILE = 'BB.csv' class UnicodeDictReader(csv.DictReader): def __init__(self, f, fieldnames=None): csv.DictReader.__init__( self, f, fieldnames) def main(): total = 0 all_sum = 0 line_num = 0 with open(DATAFILE) as csvfile: reader = UnicodeDictReader(csvfile) for record in reader: # 値を数値で取得 A = int(record['38186']) B = int(record['38181']) C = int(record['38143']) item_total = A + B + C total = item_total all_sum += item_total line_num += 1 average = all_sum / reader.line_num print(" %d + %d + %d = %d " % ( A, B, C, total)) print(u"合計 %d " % all_sum) print(u"平均 %d " % average) if __name__ == '__main__': main() BB.csvは以下です、 38186,38181,38143 1,1,4 1,1,4 ,, ,, 2020,2020,2020 1412,1412,1412 625,625,625 75,75,75 75,75,75 75,75,75 75,75,75 4,4,4 4,4,4 4,4,4 7828,7828,7828 X,, 0,0,0 0,0,0 ○,, 0,0,0 0,0,0 0,0,0 ,,AAA 0,0,0 0,0,0 0,0,0 ,BBB, 0,0,0 0,0,0 0,0,0 ,, 0,0,0 ,, 0,0,0 0,0,0 ,, 0,0,0 0,0,0 750,750,750 400,400,400 400,400,400 ,, 0,0,0 0,0,0 0,0,0 ,, 0,0,0 0,0,0 0,0,0 0,0,0 0,0,0 0,0,0 0,0,0 6,6,6 6,6,6 18,18,18 18,18,18 18,18,18 18,18,18 18,18,18 16,16,16 16,16,16 6,6,6 6,6,6 18,18,18 18,18,18 18,18,18 18,18,18 18,18,18 11,11,11 11,11,11 11,11,11 3,3,3 3,3,3 3,3,3 3,3,3 4,4,4 4,4,4 3,3,3 3,3,3 16,16,16 16,16,16 16,16,16 14,8,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 15,15,15

  • 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のスクリプトが動きません

    Webで"大きなPDFファイルを自動分割するPythonスクリプト" #!/usr/bin/env python # -*- coding: utf-8 -*- import os import glob import math import subprocess import re #==-User Parameter==== MAX_PDF_SIZE_MB=80 class PdfSplit: def __init__(self, fileName, resultpath): print("Split file name is "+fileName) #FileSizeCheck fsizeMB=float(os.path.getsize(fileName))/1000000 print("file size is "+str(fsizeMB)+" MB") if fsizeMB<=MAX_PDF_SIZE_MB: print("Not need split") return; nSplit=int(math.ceil(fsizeMB/MAX_PDF_SIZE_MB)) print("nSplit:"+str(nSplit)) nPage=self.GetPdfPageNumber(fileName) # nPage=888 print("nPage:"+str(nPage)) if nPage==0: print("Error: cannot read page:"+fileName) return onePage=int(math.ceil(nPage/nSplit)) print("onePage:"+str(onePage)) #result path finalpath=resultpath+"/"+fileName[2:-4] print("finalpath:"+finalpath) #Page split startpage=1 for i in range(nSplit): endpage=(i+1)*onePage if i==nSplit-1: endpage=nPage print "start page:"+str(startpage)+",endpage:"+str(endpage) cmd="pdftk "+fileName+" cat "+str(startpage)+"-"+str(endpage)+" output "+finalpath+"_"+str(i+1)+".pdf" # pdftk 元ファイル名.pdf cat 開始ページ-終了ページ output 出力ファイル名.pdf p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) p.wait() stdout_data, stderr_data = p.communicate() print stderr_data startpage=endpage+1 def GetPdfPageNumber(self,fileName): cmd="pdftk "+fileName+" data_dump" print cmd p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # p.wait() stdout_data, stderr_data = p.communicate() extracted=0 count=0 for strline in stdout_data.split("\n"): # print strline #sample NumberOfPages: 344 if "NumberOfPages" in strline: number = re.search("\d+",strline) extracted = number.group() break count+=1 if count>=100: break return int(extracted) class SplitManager(): def __init__(self): print "init" def Main(self): #Create Result dir RESULT_DIR='results' if not os.path.isdir(RESULT_DIR): os.mkdir(RESULT_DIR) files = glob.glob('./*.pdf') for file in files: PdfSplit(file,RESULT_DIR) if __name__ == '__main__': print __file__+" start!!" manager=SplitManager() manager.Main() が公開されていたので使用しようと思ったのですがうまく動作しません。 このスクリプトを使用するためにPython3.7.0b3とPDFtkをインストールしました。 そして、公開されていたシクリプトをtextにコピーしてpdf.pyという名前で保存しました。 最後にpdfファイルを収納したフォルダにpdf.pyを入れて、pdf.pyを実行しました。 しかしコマンドプロンプトが一瞬表示されるだけで動作しませんでした。 何か間違っているから動かないのだと思うのですが分からないので教えてください。 Pythonスクリプトの実行手順はこれで合ってますか。 それともPythonのスクリプトとバージョンが合ってないのでしょうか。 PCはWindows7です。 回答よろしくお願いします。

  • 演算子is... 初学者 Python 3

    毎度おせわさまです。Pythonに関する質問です。 今回は演算子isについて。 ネット上の初心者むけサイトで独学に励んでいるのですが、演算子isは、左辺と右辺のオブジェクトが同じオブジェクトだった場合には「True」を返します、とありました。 変数を、 str1 = "555" str2 = "555" として、 print str1 == str21 #1 print str1 is str2 #2 とすると #1は、オブジェクトの値が同じなのでTrueを返すが、#2はオブジェクトが同一ではないのでFalseを返す、と。 なるほど、なるほど。と思いながら実際に書いてみると、#1も#2もTrueを返すのですが・・・・・ バージョンの違いでしょうか?なんでしょうか???今使ているのはPython2.7です。 ご回答よろしくお願いいたします。

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

    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 データ型 ***************************************** で、変数を宣言すればいいと思うのですが、どのデータ型で宣言すればいいのでしょうか? ご回答よろしくお願いします。

  • Pythonのコンパイルの仕方が分かりません。。

    Pythonのコンパイルの仕方が分かりません。。 最近、Pythonをやり始めて、 スクリプト(hello.py)を作成したのですが、 実行ができません。 どうしたらよいのでしょうか。 どなたか回答お願いします。 あと[hello.py]の中身は print “Hello, world!” です。 command lineには Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> と表示されていて、 hello.py と打つと、 Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'hello' is not defined >>> 返ってきます。