ひとり勉強ログ

ITエンジニアの勉強したことメモ

3章 関数【退屈なことはPythonにやらせよう】

# 関数
def hello(): # 関数を定義
  print('Howdy!')
  print('Howdy!!!')
  print('Hello there.')

hello() # 関数の呼び出し
# パラメータのあるdef文
def hello(name):
  print('Hello ' + name)

hello('Alice')
hello('Bob')
# 戻り値とreturn文
import random

def get_answer(answer_number):
  if answer_number == 1:
    return '確かにそうだ'
  elif answer_number == 2:
    return '間違いなくそうだ'
  elif answer_number == 3:
    return 'はい'
  elif answer_number == 4:
    return 'なんとも。もういちどやってみて'
  elif answer_number == 5:
    return 'あとでもう一度聞いてみて'
  elif answer_number == 6:
    return '集中してもう一度きいてみて'
  elif answer_number == 7:
    return '私の答えはノーです'
  elif answer_number == 8:
    return '見通しはそれほどよくない'
  elif answer_number == 9:
    return 'とても疑わしい'

r = random.randint(1, 9) # 1から9までのランダムな整数
fortune = get_answer(r)
print(fortune)
# print()関数
# print()関数は渡された文字列の末尾に改行文字を自動的に追加する
print('Hello')
print('World')

# 改行を表示されないようにする
print('Hello', end='')
print('World')
# 複数の文字列をprint()に渡すと、文字列の間に1文字のスペースを自動的に追加する
print('cats', 'dogs', 'mice')

# キーワード引数のsepを使って、区切り文字を変更する
print('cats', 'dogs', 'mice', sep=',')
# ローカル変数はグローバルスコープから使えない
from errno import E2BIG

def spam():
  eggs = 31337
spam()
print(eggs)

実行結果:

NameError: name 'eggs' is not defined

# ローカルスコープでは他のローカルスコープの変数を使えない
def spam():
  eggs = 99
  bacon() #ローカルスコープ②が生成
  print(eggs)

def bacon():
  ham = 101 #ローカルスコープ②
  eggs = 0 #ローカルスコープ①とは別の変数

spam() #ローカルスコープ①が生成

実行結果:

99
# グローバル変数はローカルスコープから読むことができる
def spam():
  print(eggs) # グローンバル変数のeggsを参照する
eggs = 42
spam()
print(eggs)

実行結果:

42
42
# 同じ名前のローカル変数とグローバル変数
def spam():
  eggs = 'spam local'
  print(eggs) # 'spam local'を表示

def bacon():
  eggs = 'bacon local'
  print(eggs) # 'bacon local'を表示
  spam()
  print(eggs) # 'bacon local'を表示

eggs = 'global'
bacon()
print(eggs) # 'global'を表示

実行結果:

bacon local
spam local
bacon local
global
# global文
def spam():
  global eggs # eggsはグルーバル変数であることを定義
  eggs = 'spam' # グローバルスコープのeggsに代入される

eggs = 'global'
spam()
print(eggs)

実行結果:

spam
def spam():
  global eggs
  eggs = 'spam' # グローバル変数になる
 
def bacon():
  eggs = 'bacon' # ローカル変数になる

def ham():
  print(eggs) # グローバル変数になる

eggs = 42
spam()
print(eggs)

実行結果:

spam
# 例外処理
def spam(divide_by):
  return 42 / divide_by
print(spam(2))
print(spam(12))
print(spam(0))
print(spam(1))
ZeroDivisionError: division by zero
# tryとexcept文で例外を処理
def spam(divide_by):
  try:
    return 42 / divide_by
  except ZeroDivisionError:
    print('エラー:不正な引数です')
print(spam(2))
print(spam(12))
print(spam(0))
print(spam(1))
21.0
3.5
エラー:不正な引数です
None
42.0
# 数当てゲーム
import random
secret_number = random.randint(1, 20)
print('1から20までの数を当ててください')
# 6回聞く
for guessses_token in range(1, 7): # 最大6回繰り返す
  print('数を入力してください')
  guess = int(input()) # 入力した文字列を整数値に変換

  if guess < secret_number:
    print('小さいです')
  elif guess > secret_number:
    print('大きいです')
  else:
    break # 当たり!forループから抜ける

if guess == secret_number:
  print('当たり!' + str(guessses_token) + '回で当たりました!')
else:
  print('残念。正解は' + str(secret_number) + 'でした。')