# 左下直角の二等辺三角形
print('左下直角二等辺三角形')
n = int(input('短辺:'))
for i in range(1, n + 1):
for _ in range(i):
print('*', end='')
print()
C:>python xxx.py
左下直角二等辺三角形
短辺:3 (画面入力)
*
**
***
# 長方形
print('長方形')
h = int(input('高さ:'))
w = int(input('横幅:'))
for i in range(1, h + 1):
for _ in range(w):
print('*', end='')
print()
C:>python xxx.py
長方形
高さ:5 (画面入力)
横幅:5 (画面入力)
*****
*****
*****
*****
*****
# 左下直角の二等辺三角形と長方形を表示
def put_star(n):
"""n個の'*'を連続して表示"""
for _ in range(n):
print('*', end='')
print('左下直角二等辺三角形')
n = int(input('短辺:'))
for i in range(1, n + 1):
put_star(i)
print()
print('長方形')
h = int(input('高さ:'))
w = int(input('横幅:'))
for i in range(1, h + 1):
put_star(w)
print()
C:>python xxx.py
左下直角二等辺三角形
短辺:3 (画面入力)
*
**
***
長方形
高さ:5 (画面入力)
横幅:5 (画面入力)
*****
*****
*****
*****
*****
# 左下直角の二等辺三角形と長方形を表示
# ※エラー:関数定義を末尾に配置
print('左下二等辺直角三角形')
n = int(input('短辺:'))
for i in range(1, n + 1):
put_star(i)
print()
print('長方形')
h = int(input('高さ:'))
w = int(input('横幅:'))
for i in range(1, h + 1):
put_star(w)
print()
def put_star(n):
"""n個の'*'を連続して表示"""
for _ in range(n):
print('*', end='')
C:>python xxx.py
左下二等辺直角三角形
短辺:5 (画面入力)
Traceback (most recent call last):
File “C:\xxx.py”, line 8, in
put_star(i)
^^^^^^^^
NameError: name ‘put_star’ is not defined
# 3値の最大値を求める
def max3(a, b, c):
"""aとbとcの最大値を求めて返却"""
max = a
if b > max: max = b
if c > max: max = c
return max
n1 = int(input('整数n1:'))
n2 = int(input('整数n2:'))
n3 = int(input('整数n3:'))
print(f'最大値は{max3(n1, n2, n3)}です。')
x1 = float(input('実数x1:'))
x2 = float(input('実数x2:'))
x3 = float(input('実数x3:'))
print(f'最大値は{max3(x1, x2, x3)}です。')
print(f'n1とn2とx1の最大値は{max3(n1, n2, x1)}です。')
C:>python xxx.py
整数n1:4 (画面入力)
整数n2:3 (画面入力)
整数n3:5 (画面入力)
最大値は5です。
実数x1:1 (画面入力)
実数x2:2 (画面入力)
実数x3:3 (画面入力)
最大値は3.0です。
n1とn2とx1の最大値は4です。
# 2値の最大値を求める
def max2(a, b):
"""aとbの最大値を求めて返却"""
if a > b:
return a
return b
n1 = int(input('整数n1:'))
n2 = int(input('整数n2:'))
print(f'最大値は{max2(n1, n2)}です。')
C:>python xxx.py
整数n1:1 (画面入力)
整数n2:2 (画面入力)
最大値は2です。
# 2値の最大値を求める(別解:条件演算子を利用)
def max2(a, b):
"""aとbの最大値を求めて返却"""
return a if a > b else b # 条件演算子if elseを利用
n1 = int(input('整数n1:'))
n2 = int(input('整数n2:'))
print(f'最大値は{max2(n1, n2)}です。')
C:>python xxx.py
整数n1:3 (画面入力)
整数n2:1 (画面入力)
最大値は3です。
# 2値の最小値と最大値を求める
def min_max2(a, b):
"""aとbの最小値と最大値を求めて返却"""
return (a, b) if a < b else (b, a)
n1 = int(input('整数n1:'))
n2 = int(input('整数n2:'))
minimum, maximum = min_max2(n1, n2)
print(f'最小値は{minimum}で最大値は{maximum}です。')
C:>python xxx.py
整数n1:1 (画面入力)
整数n2:2 (画面入力)
最小値は1で最大値は2です。
# print関数の返却値を表示
print(print('ABC'))
C:>python xxx.py
ABC
None
# print関数の返却値を表示
x = print(print('ABC')) # 外側のprint関数の返却値をxに代入
print(x) # xの値を表示
C:>python xxx.py
ABC
None
None
# 暗算トレーニング(3桁の整数を三つ加える)
import random
def confirm_retry():
"""もう一度行うかどうかを確認する"""
while True:
n = int(input('もう一度?<Yes…1/No…0>:'))
if n == 0 or n == 1:
return n
print('暗算トレーニング開始!!')
while True:
x = random.randint(100, 999)
y = random.randint(100, 999)
z = random.randint(100, 999)
while True:
print(f'{x} + {y} + {z} = ', end='')
if (k := int(input())) == x + y + z:
break
print('違います!!')
if not confirm_retry():
break
C:>python xxx.py
暗算トレーニング開始!!
896 + 680 + 826 = 1500 (画面入力)
違います!!
896 + 680 + 826 = 2402 (画面入力)
もう一度?:0
# 非負の整数の階乗値を求める
def factorial(n):
"""非負の整数nの階乗を再帰的に求める"""
if n > 0:
return n * factorial(n - 1)
else:
return 1
n = int(input('何の階乗:'))
print(f'{n}の階乗は{factorial(n)}です。')
C:>python xxx.py
何の階乗:2 (画面入力)
2の階乗は2です。
# 1からnまでの和を求めるプログラム
def sum_1ton(n):
"""1からnまでの整数の和を求める"""
s = 0
while n > 0:
s += n
n -= 1
return s
x = int(input('xの値:'))
total = sum_1ton(x)
print(f'1から{x}までの和は{total}です。')
C:>python xxx.py
xの値:5 (画面入力)
1から5までの和は15です。
# 受け取った時点での仮引数が実引数そのものであることを確認
def func(n):
"""仮引数の値と識別番号を表示"""
print(f'n:{n} {id(n)}')
n = 0
print(f'n:{n} {id(n)}')
x = 5
print(f'x:{x} {id(x)}')
func(x)
print(f'x:{x} {id(x)}')
C:>python xxx.py
x:5 140707667371048
n:5 140707667371048
n:0 140707667370888
x:5 140707667371048
# リストの任意の要素の値を更新する
def change(lst, idx, val):
"""lst[idx]の値をvalに更新"""
lst[idx] = val
x = [11, 22, 33, 44, 55]
print(f'x = {x}')
index = int(input('インデックス:'))
value = int(input('新しい値 :'))
change(x, index, value)
print(f'x = {x}')
C:>python xxx.py
x = [11, 22, 33, 44, 55]
インデックス:2
新しい値 :100
x = [11, 22, 100, 44, 55]
# リストの要素の並びを反転する
def reverse_list(lst):
"""lstの要素の並びを反転"""
n = len(lst) # 要素数を取得
for i in range(n // 2):
lst[i], lst[n - i - 1] = lst[n - i - 1], lst[i]
x = [22, 57, 11, 32, 91, 68, 77]
print(f'x = {x}')
reverse_list(x)
print(f'x = {x}')
C:9>python xxx.py
x = [22, 57, 11, 32, 91, 68, 77]
x = [77, 68, 91, 32, 11, 57, 22]
# 敬称を付けて挨拶する関数(デフォルト値をもつ仮引数)
def hello(name, honorific = 'さん'):
"""敬称を付けて挨拶する"""
print(f'こんにちは、{name}{honorific}。')
hello('田中')
hello('関根', '君')
hello('西田', '先生')
C:>python xxx.py
こんにちは、田中さん。
こんにちは、関根君。
こんにちは、西田先生。
# 左下直角の二等辺三角形と長方形を表示(その1:位置引数)
def puts(n, s):
"""n個のsを連続して表示"""
for _ in range(n):
print(s, end='')
print('左下直角二等辺三角形')
n = int(input('短辺:'))
for i in range(1, n + 1):
puts(i, '*')
print()
print('長方形')
h = int(input('高さ:'))
w = int(input('横幅:'))
for i in range(1, h + 1):
puts(w, '+')
print()
C:>python xxx.py
左下直角二等辺三角形
短辺:3 (画面入力)
*
**
***
長方形
高さ:5 (画面入力)
横幅:3 (画面入力)
+++
+++
+++
+++
+++
# 左下直角の二等辺三角形と長方形を表示(その2:キーワード引数)
# n個のsを連続して表示
def puts(n, s):
for i in range(n):
print(s, end='')
print('左上直角二等辺三角形')
n = int(input('短辺:'))
for i in range(1, n + 1):
puts(n = i, s = '*')
print()
print('長方形')
h = int(input('高さ:'))
w = int(input('横幅:'))
for i in range(1, h + 1):
puts(s = '+', n = w)
print()
C:>python xxx.py
左上直角二等辺三角形
短辺:5 (画面入力)
*
**
***
****
*****
長方形
高さ:3 (画面入力)
横幅:5 (画面入力)
+++++
+++++
+++++
# 2個以上の任意の個数の値の最大値を求める
def max2more(a, b, *num):
"""2個以上の任意の個数の値の最大値を求める"""
max = a if a > b else b
for n in num:
if n > max:
max = n
return max
print(f'max2more(1, 2) = {max2more(1, 2)}')
print(f'max2more(1, 2, 3) = {max2more(1, 2, 3)}')
print(f'max2more(1, 2, 3, 4, 5) = {max2more(1, 2, 3, 4, 5)}')
print(f'max2more(1) = {max2more(1)}') # エラー
C:>python xxx.py
max2more(1, 2) = 2
max2more(1, 2, 3) = 3
max2more(1, 2, 3, 4, 5) = 5
Traceback (most recent call last):
File “C:\xxx.py”, line 14, in
print(f’max2more(1) = {max2more(1)}’) # エラー~~~~^^^
TypeError: max2more() missing 1 required positional argument: ‘b’
# 可変個引数の情報を表示する
def print_args(*args):
"""可変個の引数を受け取るargsの情報を表示"""
print(f'type(args) = {type(args)}')
print(f'len(args) = {len(args)}')
print(f'args = {args}')
print_args()
print()
print_args(1, 2, 3)
C:>python xxx.py
type(args) =
len(args) = 0
args = ()
type(args) =
len(args) = 3
args = (1, 2, 3)
# 引数の和を表示しながら求める
def print_sum(a, *no):
"""引数の和を返却(式も表示)"""
sum = a
print(a, end='')
n = len(no)
if n > 0:
print(' + ', end='')
for i in range(n - 1):
sum += no[i]
print(f'{no[i]} + ', end='')
sum += no[n - 1]
print(no[n - 1], end='')
print(f' = {sum}')
return sum
print_sum(5)
print_sum(9, 3)
print_sum(3, 6, 8, 2, 7)
C:>python xxx.py
5 = 5
9 + 3 = 12
3 + 6 + 8 + 2 + 7 = 26
# リストにまとめられている3値の最大値を求める
def max3(a, b, c):
"""aとbとcの最大値を求めて返却"""
max = a
if b > max: max = b
if c > max: max = c
return max
lst1 = [1, 3, 5]
m = max3(*lst1)
print(f'{lst1}の最大値は{m}です。')
C:>python xxx.py
[1, 3, 5]の最大値は5です。
# タプルにまとめられている3値の最大値を求める
def max3(a, b, c):
"""aとbとcの最大値を求めて返却"""
max = a
if b > max: max = b
if c > max: max = c
return max
tpl1 = (1, 3, 5)
m = max3(*tpl1)
print(f'{tpl1}の最大値は{m}です。')
C:>python xxx.py
(1, 3, 5)の最大値は5です。
# 引数の和を表示しながら求める(実引数のアンパック)
def print_sum(a, *no):
"""引数の和を返却(式も表示)"""
sum = a
print(a, end='')
n = len(no)
if n > 0:
print(' + ', end='')
for i in range(n - 1):
sum += no[i]
print(f'{no[i]} + ', end='')
sum += no[n - 1]
print(no[n - 1], end='')
print(f' = {sum}')
return sum
lst1 = [1, 3, 5, 7]
print_sum(*lst1)
C:>python xxx.py
1 + 3 + 5 + 7 = 16
# 辞書化されたキーワード引数の情報を表示する
def print_kwargs(s, **kwargs):
"""辞書化されたキーワード引数を受け取るkwargsの情報を表示"""
print(s)
print(f'type(kwargs) = {type(kwargs)}')
print(f'len(kwargs) = {len(kwargs)}')
print(f'kwargs = {kwargs}')
print_kwargs('1番', spring='春', summer='夏')
print()
print_kwargs('2番', spring='春')
C:>python xxx.py
1番
type(kwargs) =
len(kwargs) = 2
kwargs = {‘spring’: ‘春’, ‘summer’: ‘夏’}
2番
type(kwargs) =
len(kwargs) = 1
kwargs = {‘spring’: ‘春’}
# 辞書に格納されている人物の情報を表示
def put_person(**person):
"""辞書person内の情報を表示"""
if 'name' in person: print(f'名前 = {person["name"]}', end=' ')
if 'visa' in person: print(f'国籍 = {person["visa"]}', end=' ')
if 'age' in person: print(f'年齢 = {person["age"]}', end=' ')
print() # 改行
put_person(name='中田', visa='日本', age=27)
put_person(name='趙', visa='中国')
C:>python xxx.py
名前 = 中田 国籍 = 日本 年齢 = 27
名前 = 趙 国籍 = 中国
# 辞書に格納されている人物の情報を表示
def put_person(name=None, visa=None, age=None):
"""キーワード引数に受け取った人物の情報を表示"""
if name != None: print(f'名前 = {name}', end=' ')
if visa != None: print(f'国籍 = {visa}', end=' ')
if age != None: print(f'年齢 = {age}', end=' ')
print() # 改行
put_person(name='中田', visa='日本', age=27)
put_person(name='趙', visa='中国')
C:>python xxx.py
名前 = 中田 国籍 = 日本 年齢 = 27
名前 = 趙 国籍 = 中国
# 辞書型実引数の**によるアンパックの例
def puts(n, s):
"""n個のsを連続して表示"""
for _ in range(n):
print(s, end='')
d1 = {'n': 3, 's': '*'} # 3個の'*'
d2 = {'s': '+', 'n' :7} # '+'を7個
puts(**d1)
print()
puts(**d2)
C:>python xxx.py
***
+++++++
# キーワード引数の強制
def puts(*, n, s):
"""n個のsを連続して表示"""
for _ in range(n):
print(s, end='')
puts(n = 3, s = '*')
print()
puts(s = '+', n = 7)
print()
puts(3, '*') # エラー
C:>python xxx.py
***
+++++++
Traceback (most recent call last):
File “C:\chap09\list0926.py”, line 12, in
puts(3, ‘*’) # エラー
~~~~^^^^^^^^
TypeError: puts() takes 0 positional arguments but 2 were given
# ユーザ定義関数putsと組込み関数maxのドキュメントを表示
def puts(n, s):
"""n個のsを連続して表示"""
for _ in range(n):
print(s, end='')
help(puts)
help(max)
C:>python xxx.py
Help on function puts in module main:
puts(n, s)
n個のsを連続して表示
Help on built-in function max in module builtins:
max(…)
max(iterable, *[, default=obj, key=func]) -> value
max(arg1, arg2, *args, *[, key=func]) -> value
With a single iterable argument, return its biggest item. The
default keyword-only argument specifies an object to return if
the provided iterable is empty.
With two or more positional arguments, return the largest argument.
# アノテーション付きの関数puts
def puts(n: int, s: str) -> None:
"""n個のsを連続して表示"""
for _ in range(n):
print(s, end='')
puts(5, '*')
print()
print(puts.__annotations__)
print()
puts('*', 5) # エラー
C:>python xxx.py
{‘n’: , ‘s’: , ‘return’: None}
Traceback (most recent call last):
File “C:\xxx.py”, line 12, in
puts(‘*’, 5) # エラー~~^^^^^^^^ File “C:\xxx.py”, line 5, in puts for _ in range(n): ~~~^^^
TypeError: ‘str’ object cannot be interpreted as an integer
"""アノテーションと文書化文字列付きの関数puts"""
def puts(n: int, s: str) -> None:
"""n個のsを連続して表示
仮引数:
n -- 表示する文字列の個数
s -- 表示する文字列
返却値:
無し
"""
for _ in range(n):
print(s, end='')
print(puts.__doc__) # 文書化文字列を表示
C:>python xxx.py
n個のsを連続して表示
仮引数:
n — 表示する文字列の個数
s — 表示する文字列
返却値:
無し
"""ある年の日数を求める"""
def is_leapyear(year: int) -> bool:
"""西暦year年は閏年か"""
return y % 4 == 0 and y % 100 != 0 or y % 400 == 0
print('ある年の日数を求めます。')
y = int(input('何年:'))
print(f'その年は{365 + is_leapyear(y)}日です。')
C:>python xxx.py
ある年の日数を求めます。
何年:2002 (画面入力)
その年は365日です。
"""辞書から特定の値をもつキーのリストを生成"""
def keys_of(dic: dict, val: 'value') -> list:
"""辞書dic内の値がvalである要素のキーのリストを返却"""
return [k for k, v in dic.items() if v == val]
txt = input('文字列:')
count = {ch: txt.count(ch) for ch in txt}
print('分布=', count)
num = int(input('何個の文字:'))
print(f'{num}個の文字={keys_of(count, num)}')
C:>python xxx.py
文字列:abc (画面入力)
分布= {‘a’: 1, ‘b’: 1, ‘c’: 1}
何個の文字:1 (画面入力)
1個の文字=[‘a’, ‘b’, ‘c’]
"""平均値を求める"""
def ave(*args) -> float:
"""可変個引数の平均を求める"""
return sum(args) / len(args)
print(f'ave(1, 2, 3) = {ave(1, 2, 3)}')
print(f'ave(5, 7.77, 5) = {ave(5, 7.77, 5)}')
print(f'ave(3.5, 4.7, 8.2) = {ave(3.5, 4.7, 8.2)}')
C:>python xxx.py
ave(1, 2, 3) = 2.0
ave(5, 7.77, 5) = 5.923333333333333
ave(3.5, 4.7, 8.2) = 5.466666666666666
"""リスト形式の文字列に変換する"""
def list_str(*args) -> str:
"""可変個引数をリスト形式の文字列に
変換して返却する"""
return str(list(args))
print(f'list_str(1, 2, 3) = {list_str(1, 2, 3)}')
print(f'list_str(5, 7.77, 5) = {list_str(5, 7.77, 5)}')
print(f'list_str(3.5, 4.7, 8.2) = {list_str(3.5, 4.7, 8.2)}')
C:>python xxx.py
list_str(1, 2, 3) = [1, 2, 3]
list_str(5, 7.77, 5) = [5, 7.77, 5]
list_str(3.5, 4.7, 8.2) = [3.5, 4.7, 8.2]
"""乗算表を表示"""
upper = int(input('1から何まで:'))
def multiplication_table(n: int) -> bool:
"""1~nまでの乗算表を表示"""
if 1 <= n <= 3: w = 2
elif 4 <= n <= 9: w = 3
elif 10 <= n <= 31: w = 4
else : return False
print('-' * n * w)
for i in range(1, n + 1):
for j in range(1, n + 1):
print(f'{i * j:{w}d}', end='')
print()
print('-' * n * w)
return True
multiplication_table(upper)
C:>python xxx.py
1から何まで:5 (画面入力)
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
"""乗算表を表示(その2)"""
upper = int(input('1から何まで:'))
def multiplication_table() -> bool:
"""1~nまでの乗算表を表示"""
if 1 <= upper <= 3: w = 2
elif 4 <= upper <= 9: w = 3
elif 10 <= upper <= 31: w = 4
else : return False
print('-' * upper * w)
for i in range(1, upper + 1):
for j in range(1, upper + 1):
print(f'{i * j:{w}d}', end='')
print()
print('-' * upper * w)
return True
multiplication_table()
C:>python xxx.py
1から何まで:9 (画面入力)
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
"""乗算表を表示(内部関数)"""
upper = int(input('1から何まで:'))
def multiplication_table(n: int) -> bool:
"""1~nまでの乗算表を表示"""
def put_bar(n: int) -> None:
"""n個の'-'を連続表示して改行"""
print('-' * n)
if 1 <= n <= 3: w = 2
elif 4 <= n <= 9: w = 3
elif 10 <= n <= 31: w = 4
else : return False
put_bar(n * w)
for i in range(1, n + 1):
for j in range(1, n + 1):
print(f'{i * j:{w}d}', end='')
print()
put_bar(n * w)
return True
multiplication_table(upper)
C:>python xxx.py
1から何まで:5 (画面入力)
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
"""乗算表を表示(内部関数:引数を削除)"""
upper = int(input('1から何まで:'))
def multiplication_table(n: int) -> bool:
"""1~nまでの乗算表を表示"""
def put_bar() -> None:
"""n * w個の'-'を連続表示して改行"""
print('-' * n * w)
if 1 <= n <= 3: w = 2
elif 4 <= n <= 9: w = 3
elif 10 <= n <= 31: w = 4
else : return False
f = '{{:{}d}}'.format(w)
put_bar()
for i in range(1, n + 1):
for j in range(1, n + 1):
print(f.format(i * j), end='')
print()
put_bar()
return True
multiplication_table(upper)
C:>python xxx.py
1から何まで:11 (画面入力)
1 2 3 4 5 6 7 8 9 10 11
2 4 6 8 10 12 14 16 18 20 22
3 6 9 12 15 18 21 24 27 30 33
4 8 12 16 20 24 28 32 36 40 44
5 10 15 20 25 30 35 40 45 50 55
6 12 18 24 30 36 42 48 54 60 66
7 14 21 28 35 42 49 56 63 70 77
8 16 24 32 40 48 56 64 72 80 88
9 18 27 36 45 54 63 72 81 90 99
10 20 30 40 50 60 70 80 90 100 110
11 22 33 44 55 66 77 88 99 110 121
"""変数内外の変数の値の確認"""
g1 = 1
g2 = 2
def outer():
def inner():
f2 = 6
print(f'[2] inner() g1, g2 = {g1}, {g2}')
print(f' inner() f1, f2 = {f1}, {f2}')
f1 = 3
f2 = 4
g2 = 5
inner()
print(f'[3] outer() g1, g2 = {g1}, {g2}')
print(f' outer() f1, f2 = {f1}, {f2}')
print(f'[1] global g1, g2 = {g1}, {g2}')
outer()
print(f'[4] global g1, g2 = {g1}, {g2}')
C:>python xxx.py
[1] global g1, g2 = 1, 2
[2] inner() g1, g2 = 1, 5
inner() f1, f2 = 3, 6
[3] outer() g1, g2 = 1, 5
outer() f1, f2 = 3, 4
[4] global g1, g2 = 1, 2
# global文なし
n = 1
def func():
# 同名の変数を作成
n = 2 # nは局所変数
print(f'n = {n}')
print(f'n = {n}')
func()
print(f'n = {n}')
C:>python xxx.py
n = 1
n = 2
n = 1
# global文あり
n = 1
def func():
global n
n = 2 # nは広域変数
print(f'n = {n}')
print(f'n = {n}')
func()
print(f'n = {n}')
C:>python xxx.py
n = 1
n = 2
n = 2
# nonlocal文なし
def outer():
n = 1
def inner():
# 同名の変数を作成
n = 2
print(f'n = {n}')
print(f'n = {n}')
inner()
print(f'n = {n}')
outer()
C:>python xxx.py
n = 1
n = 2
n = 1
# nonlocal文あり
def outer():
n = 1
def inner():
nonlocal n
n = 2
print(f'n = {n}')
print(f'n = {n}')
inner()
print(f'n = {n}')
outer()
C:>python xxx.py
n = 1
n = 2
n = 2
"""関数がオブジェクトであることを確認"""
def min2(a, b):
"""aとbの最小値を求めて返却する関数"""
return a if a < b else b
a = int(input('整数a:'))
b = int(input('整数b:'))
func = min2
print(f'最小値は{func(a, b)}です。')
del min2
print(f'最小値は{func(a, b)}です。')
del func
print(f'最小値は{func(a, b)}です。') # エラー
C:>python xxx.py
整数a:1
整数b:2
最小値は1です。
最小値は1です。
Traceback (most recent call last):
File “C:\xxx.py”, line 17, in
print(f’最小値は{func(a, b)}です。’) # エラー
^^^^
NameError: name ‘func’ is not defined
"""関数の型と識別番号を表示"""
def min2(a, b):
"""aとbの最小値を求めて返却する関数"""
return a if a < b else b
func = min2
print(f'type(min2), id(min2) = {type(min2)} {id(min2)}')
print(f'type(func), id(func) = {type(func)} {id(func)}')
C:>python xxx.py
type(min2), id(min2) = 2356229110528
type(func), id(func) = 2356229110528
"""一つの名前で二つの関数を呼び出す"""
def mul2(x, y):
return x * y
def add2(x, y):
return x + y
a = int(input('整数a:'))
b = int(input('整数b:'))
func = mul2
print(f'aとbの積は{func(a, b)}です。')
func = add2
print(f'aとbの和は{func(a, b)}です。')
C:>python xxx.py
整数a:1
整数b:2
aとbの積は2です。
aとbの和は3です。
"""九九の掛け算表・足し算表を表示"""
def kuku(func):
"""九九の表を表示"""
for i in range(1, 10):
for j in range(1, 10):
print(f'{func(i, j):3d}', end='')
print()
def mul2(x, y):
return x * y
def add2(x, y):
return x + y
n = int(input('掛け算[0]/足し算[1]:'))
if n == 0:
print('九九の掛け算表')
kuku(mul2)
elif n == 1:
print('九九の足し算表')
kuku(add2)
C:>python xxx.py
掛け算[0]/足し算[1]:0
九九の掛け算表
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
"""2値の和を求めるラムダ式(その1)"""
a = int(input('整数a:'))
b = int(input('整数b:'))
add2 = lambda x, y: x + y
print(f'aとbの和は{add2(a, b)}です。')
C:>python xxx.py
整数a:12
整数b:15
aとbの和は27です。
"""2値の和を求めるラムダ式(その2)"""
a = int(input('整数a:'))
b = int(input('整数b:'))
print(f'aとbの和は{(lambda x, y: x + y)(a, b)}です。')
C:>python xxx.py
整数a:5
整数b:8
aとbの和は13です。
"""九九の掛け算表・足し算表を表示"""
def kuku(func):
"""九九の表を表示"""
for i in range(1, 10):
for j in range(1, 10):
print(f'{func(i, j):3d}', end='')
print()
n = int(input('掛け算[0]/足し算[1]:'))
if n == 0:
print('九九の掛け算表')
kuku(lambda x, y: x * y)
elif n == 1:
print('九九の足し算表')
kuku(lambda x, y: x + y)
C:>python xxx.py
掛け算[0]/足し算[1]:0
九九の掛け算表
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
# リストの全要素を2倍にする(関数)
def double(n):
return 2 * n
x = [1, 2, 3, 4]
y = map(double, x)
print(list(y))
C:>python xxx.py
[2, 4, 6, 8]
# リストの全要素を2倍にする(ラムダ式)
x = [1, 2, 3, 4]
y = map(lambda n: 2 * n, x)
print(list(y))
C:>python xxx.py
[2, 4, 6, 8]
# 80点以上の点数のみを抽出
import random
number = int(input('学生の人数:'))
tensu = [None] * number
for i in range(number):
tensu[i] = random.randint(0, 100)
print(f'全員の点数={tensu}')
print(f'合格者の点数={list(filter(lambda n: n >= 80, tensu))}')
C:>python xxx.py
学生の人数:5
全員の点数=[54, 79, 48, 33, 6]
合格者の点数=[]
def list_apnd(a, lst=[]):
"""呼び出されるたびにリストを連結して表示"""
lst += a
print(lst)
list_apnd([1]) # [] に[1]を追加。 lstのデフォルト値は[1]になる。
list_apnd([2]) # [1] に[2]を追加。 lstのデフォルト値は[1, 2]になる。
list_apnd([3, 4]) # [1, 2]に[3, 4]を追加。lstのデフォルト値は[1, 2, 3, 4]になる。
C:>python xxx.py
[1]
[1, 2]
[1, 2, 3, 4]
# mapの利用例(その1:全要素を文字列に変換する)
x = [1, 2, 3, 4]
print(list(map(str, x)))
C:>python xxx.py
[‘1’, ‘2’, ‘3’, ‘4’]
# mapの利用例(その2:全要素の単位をセンチメートルからインチに変換する)
x = [1, 2, 3, 4]
print(list(map(lambda n: 2.54 * n , x)))
C:>python xxx.py
[2.54, 5.08, 7.62, 10.16]
"""maxが関数から変数に変身"""
a, b, c = 3, 7, 5
max = max(a, b, c) # 1回目:OK (max = 7)
print(f'aとbとcの最大値は{max}です。')
max = max(a, b, c) # 2回目:エラー(max = 7(a, b, c))
C:>python xxx.py
aとbとcの最大値は7です。
Traceback (most recent call last):
File “C:\xxx.py”, line 7, in
max = max(a, b, c) # 2回目:エラー(max = 7(a, b, c))
TypeError: ‘int’ object is not callable
# リストを表示
lst1 = [1, 3, 5, 7]
print(lst1)
print(*lst1)
C:>python xxx.py
[1, 3, 5, 7]
1 3 5 7
# リストを表示(sepを指定)
lst1 = [1, 3, 5, 7]
print(*lst1, sep=' ') # 要素の区切りをスペース2個にする
print(*lst1, sep='\n') # 要素を表示するたびに改行(各行に1個の要素)
C:>python xxx.py
1 3 5 7
1
3
5
7
この記事は役に立ちましたか?
もし参考になりましたら、下記のボタンで教えてください。
コメント