専門ユニット2/山内研セミナー(2021/10/12)

関連サイトと資料


「第19回 タプル」のサンプルプログラム, 「第20回 辞書」のサンプルプログラム, 「第22回 モジュールの使い方」のサンプルプログラム

「第19回 タプル」のサンプルプログラム

sk = ('shinji', 'kawasaki', 80)
print(sk)
    

sk = 'shinji', 'kawasaki', 80
print(sk)
    

emptytuple = ()  # 空のタプルの作成
print(type(emptytuple))  # emptytupleの型を調べてみる
    

# どちらの方法でもよい
oneitem_tuple = ('Python',)
print(oneitem_tuple)
  
oneitem_tuple = 'Python',
print(oneitem_tuple)
    

emptytuple = tuple()  # 空のタプルを作成
mylist = [0, 1, 2, 3] 
mytuple = tuple(mylist)  # リストを基にタプルを作成
anothertuple = tuple(iter(mylist))  # イテレータを基にタプルを作成
print(mytuple)
print(anothertuple)
    

sk = ('shinji', 'kawasaki', 80)
print(sk[0])
    

sk = ('shinji', 'kawasaki', 80)
sk[1] = 'okazaki'
print(sk)
    

sk = ('shinji', 'kawasaki', 80)
for item in sk:
    print(item)
    

mytuple = (1, 2)  # タプルのパック
(x, y) = mytuple  # タプルのアンパック
print(x, y)
    

mytuple = 1, 2  # タプルのパック
x, y = mytuple  # タプルのアンパック
print(x, y)
    

def myfunc1(x):
    print(x)
  
def myfunc2(x, y):
    print(x, y)
  
myfunc1((1, 2))
myfunc2(1, 2)
myfunc1(1, 2)
myfunc2((1, 2))
    

def myfunc2(x, y):
    print(x, y)
  
myfunc2(*(1, 2))
mytuple = 1, 2
myfunc2(*mytuple)
    

mytuple = 1, 2, 3
mytuple[0] = 101  # エラー
    

mytuple = 1, 2, 3
mytuple = 4, 5, 6  # エラーではない
    

mylist1 = [0, 1, 2]
mylist2 = [3, 4, 5]
mytuple = mylist1, mylist2
print(mytuple)
mytuple[0][0] = 100
print(mytuple)
mytuple[0] = [6, 7, 8]  # エラー
    

sk = ('shinji', 'kawasaki', 80)
mi = ('masahiko', 'isshiki', 65)
person_list = [mi, sk]
for person in person_list:
    print(f'{person[1]}さんの体重は{person[2]}kgです')
    

「第20回 辞書」のサンプルプログラム

sk = {'first_name': 'shinji', 'family_name': 'kawasaki', 'weight': 80}
print(sk)
    

sk = {'first_name': 'shinji', 'family_name': 'kawasaki', 'weight': 80,
      'family_name': 'okazaki'}
print(sk)
    

emptydict = {}
print(emptydict)
    

mydict = dict()  # 空の辞書の作成
print(mydict)
mydict = dict(foo='foo', bar='bar')  # キーワード引数による辞書作成
print(mydict)
mydict = dict({'foo': 'FOO', 'bar': 'BAR'})  # 辞書を基にした辞書作成
print(mydict)
mydict = dict([('foo', 1), ['bar', 2]])  # 反復可能オブジェクトを使った辞書作成
print(mydict)
mydict = dict({'foo': 'FOO', 'bar': 'BAR'}, baz='baz')  # 組み合わせ
print(mydict)
    

urls = ['https://someurl1', 'https://someurl2', 'https://someurls3']
pvs = [12345, 123456, 1234567]
authors = ['kawasaki', 'isshiki', 'endo']
  
pv_data = {u: {'pv': p, 'author': a} for u, p, a in zip(urls, pvs, authors)}
for key, value in pv_data.items():
    print(key, value['pv'], value['author'])
    

sk = {'first_name': 'shinji', 'family_name': 'kawasaki', 'weight': 80}
print(sk['first_name'])
    

sk = {'first_name': 'shinji', 'family_name': 'kawasaki', 'weight': 80}
print(sk['age'])  # 年齢はこのデータには含まれていない
    

sk = {'first_name': 'shinji', 'family_name': 'kawasaki', 'weight': 80}
print(sk.get('first_name'))  # 存在するキーを指定
print(sk.get('age'))         # 存在しないキーを指定
print(sk.get('age', 'not found'))  # 存在しないキーと、デフォルト値を指定
    

sk = {'first_name': 'shinji', 'family_name': 'kawasaki', 'weight': 80}
sk['family_name'] = 'okazaki'
sk['age'] = 150
print(sk)
    

# どちらもエラー(TypeError例外)となる
sk = sk + {'height': 220}
sk += {'height': 220}
    

mydict = {'foo': 'FOO', 'bar': 'BAR', 'baz': 'BAZ'}
print(mydict)  # 元の辞書
mydict.update(foo='fooo', somekey='somevalue')  # キーワード引数による辞書の更新
print(mydict)
mydict.update({'bar': 'new BAR'})  # 辞書による辞書の更新
print(mydict)
mydict.update([('baz', 'new Baz'), ['x', 1]])  # リストによる辞書の更新
print(mydict)
mydict.update([('y', 2)], z=3)  # 両者の組み合わせ
print(mydict)
    

mydict = {'foo': 'foo', 'bar': 'bar', 'baz': 'baz'}
print(mydict)
result = mydict.pop('bar')  # キー'bar'に対応する項目を削除
print(result)  # 削除した項目が戻り値になる
result = mydict.pop('bar', 'not found')  # デフォルト値を指定
print(result)  # キー'bar'はないので、デフォルト値が戻り値になっている
result = mydict.pop('bar')  # キー'bar'はもう存在しないのでエラー
    

mydict = {'foo': 'foo', 'bar': 'bar', 'baz': 'baz'}
print(mydict.popitem())
print(mydict.popitem())
print(mydict.popitem())
print(mydict.popitem())
    

mydict = {'foo': 'foo', 'bar': 'bar'}
print(mydict.setdefault('foo'))  # 存在するキーを指定すれば、その値が返される
print(mydict.setdefault('baz', 'baz'))  # 存在しないキーを指定
print(mydict)
    

sk = {'first_name': 'shinji', 'family_name': 'kawasaki', 'weight': 80}
for item in sk:
    print(item)
    

sk = {'first_name': 'shinji', 'family_name': 'kawasaki', 'weight': 80}
for item in sk:
    print(item, sk[item])
    

sk = {'first_name': 'shinji', 'family_name': 'kawasaki', 'weight': 80}
for key, value in sk.items():
    print(key, value)
    

mydict = {'foo': 'foo'}
myview = mydict.keys()
print(myview)
mydict['bar'] = 'bar'
print(myview)
    

sk = {'first_name': 'shinji', 'family_name': 'kawasaki', 'weight': 80}
print('kawasaki' in sk)  # False
print('kawasaki' in sk.values())  # True
    

sk = {'first_name': 'shinji', 'family_name': 'kawasaki', 'weight': 80}
for key, value in sk.items():
    print(key, value)
    

page_data = {
    'https://www.atmarkit.co.jp/ait/articles/1906/14/news015.html':
    {
        'author': 'かわさき しんじ',
        'title': 'タプル',
        'pv': 123456
    },
    'https://www.atmarkit.co.jp/ait/articles/1906/13/news021.html':
    {
        'author': '一色 政彦',
        'title': 'Deep Learningコミュニティー……',
        'pv': 123456789
    },
    'https://www.atmarkit.co.jp/ait/articles/1906/04/news009.html':
    {
        'author': 'かわさき しんじ',
        'title': 'リストの操作',
        'pv': 1234567
    }
}
  
pv = 0
for key, value in page_data.items():
    if value['pv'] > pv:
        top_article = value
        top_article_url = key
        pv = value['pv']
  
print(f'top article is {top_article["title"]}')
print(f'top author is {top_article["author"]}')
print(f'top page view is {top_article["pv"]}')
print(f'top article url: {top_article_url}')
    

「第22回 モジュールの使い方」のサンプルプログラム

utility.py
def fizzbuzz(number):
    if number % 3 == 0 and number % 5 == 0:
        print('FizzBuzz')
    elif number % 3 == 0:
        print('Fizz')
    elif number % 5 == 0:
        print('Buzz')
    else:
        print(str(number))
    

main.py
from utility import fizzbuzz
  
for number in range(1, 16):
    print(fizzbuzz(number))
    


import random
  
print(random.randint(1, 20))
    

import random as rnd
  
print(rnd.randint(1, 20))
print(random.randint(1, 20))
    

from random import randint
  
print(randint(1, 20))
    

import matplotlib.pyplot as plt
  
def fit(x, y):
    x_mean = sum(x) / len(x)
    y_mean = sum(y) / len(y)
  
    x_centered = [item - x_mean for item in x]
    y_centered = [item - y_mean for item in y]
  
    xy = [item_x * item_y for item_x, item_y in zip(x_centered, y_centered)]
    xx = [item * item for item in x_centered]
    sum_xy = sum(xy)
    sum_xx = sum(xx)
  
    a = sum_xy / sum_xx
    b = y_mean - a * x_mean
  
    return (a, b)
  
# サンプルデータ
x = [-0.03, 0.78, 2.07, 2.77, 4.10, 5.38, 5.99, 6.84, 8.12, 8.89, 9.43]
y = [0.88, 2.45, 2.43, 4.07, 5.49, 6.46, 7.02, 8.27, 8.70, 10.23, 10.65]
  
# 一次関数の推測を行う
a, b = fit(x, y)
  
plt.plot(x, y, 'o')
plt.show()
    

import matplotlib.pyplot as plt
  
def fit(x, y):
    x_mean = sum(x) / len(x)
    y_mean = sum(y) / len(y)
  
    x_centered = [item - x_mean for item in x]
    y_centered = [item - y_mean for item in y]
  
    xy = [item_x * item_y for item_x, item_y in zip(x_centered, y_centered)]
    xx = [item * item for item in x_centered]
    sum_xy = sum(xy)
    sum_xx = sum(xx)
  
    a = sum_xy / sum_xx
    b = y_mean - a * x_mean
  
    return (a, b)
  
# サンプルデータ
x = [-0.03, 0.78, 2.07, 2.77, 4.10, 5.38, 5.99, 6.84, 8.12, 8.89, 9.43]
y = [0.88, 2.45, 2.43, 4.07, 5.49, 6.46, 7.02, 8.27, 8.70, 10.23, 10.65]
  
# 一次関数の推測を行う
a, b = fit(x, y)
  
y2 = [num * a + b for num in x]
plt.plot(x, y2)
plt.plot(x, y, 'o')  # 元のドットも同時に描画しておく
plt.show()