毎日ちょっとPython ~ 4日目 ~
今日は関数についてです
関数の定義
def 関数名:
#関数の内容を書く
という感じです。
実際にとっても簡単に書くと、
def hello():
print('Howdy!')
print('Howdy!!!')
print('Hello there.')
hello()
hello()
hello()
で、実行結果はこんな感じ。
Howdy!
Howdy!!!
Hello there.
Howdy!
Howdy!!!
Hello there.
Howdy!
Howdy!!!
Hello there.
パラメータを持たせる
def hello(name):
print('hello ' + name)
hello('SK3')
hello('すけさん')
まぁそんなにやりかたはかわらない。
戻り値とreturn文
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)
fortune = get_answer(r)
print(fortune)
None値
Noneという値がある。
ほかのプログラミング言語だと null , nil , undefined
キーワード引数とprint()関数
キーワード引数はキーワードを指定することによって引数を識別する。
キーワード引数は、不要なら指定しなくてもよいオプション引数によく用いられます。
たとえば、 print() 関数には end と sep というオプション引数があり、それぞれ、通常の引数を表示した後に表示する文字列や、引数の間に表示する文字列を指定することができる。
例えば、
print('hello')
print('world')
print('hello',end='')
print('world')
みたいな感じで、endというキーワード引数に空文字を入れると文末の改行がなくなります。
hello
world
helloworld
区切り文字を指定する場合は、sepを使います。
print('dogs','cats','mice')
print('dogs','cats','mice',sep=',')
というように、sepに「,」を渡すことで以下の用の名結果にすることができます。
dogs cats mice
dogs,cats,mice
ローカルスコープとグローバルスコープ
1. ローカル変数はグローバルスコープからは使えない
2. ローカルスコープではほかのローカルスコープの変数を使えない
3. グローバル変数はローカルスコープから読むことができる
同じ名前のローカル変数とグローバル変数はどうなるんでしょうかね。
def spam():
eggs = 'spam local'
print(eggs)
def bacon():
eggs = 'bacon local'
print(eggs)
spam()
print(eggs)
eggs = 'global'
bacon()
print(eggs)
こんな感じの結果になります
bacon local
spam local
bacon local
global
複雑だから変数名はわけようね。スコープの説明をするのにはよさそう。
global文
関数の中からグローバル変数を変更したいときは、global文を使います。
def spam():
global eggs
eggs = 'spam'
eggs = 'global'
spam()
print(eggs)
結果は「spam」になります。
例外処理
例として、「ゼロによる除算」エラーの起こるでかきます。
def spam(divide_by):
return 42 / divide_by
print(spam(2))
print(spam(12))
print(spam(0))
print(spam(1))
こんな感じの実行結果になります。
21.0
3.5
Traceback (most recent call last):
File "D:/Python/zeroDivide.py", line 6, in <module>
print(spam(0))
File "D:/Python/zeroDivide.py", line 2, in spam
return 42 / divide_by
ZeroDivisionError: division by zero(ゼロによる除算エラー:ゼロで除算した
0で割ろうとすると起こるエラーです。これに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 guesses_taken in range(1,7):
print('数を入力してください。')
guess = int(input())
if guess < secret_number:
print('小さいです')
elif guess > secret_number:
print('おおきいです。')
else:
break #あたり
if guess == secret_number:
print('あたり!' + str(guesses_taken) + '回で当たりました')
else:
print('残念。正解は' + str(secret_number) + 'でした')
これ、数字以外を入力したときにエラーが出てしまうので直したほうがいいかも。したほうがいいかな...
最後に
面白いけど、まだPythonっぽくないな
この記事が気に入ったらサポートをしてみませんか?