![見出し画像](https://assets.st-note.com/production/uploads/images/89117932/rectangle_large_type_2_ccc06ce4b16b85577b92af041996018a.png?width=1200)
【Python】SimplePrograms line 10 (時間とfrom-importとfor-else)
プログラム
10行プログラムです。
from time import localtime
activities = {8: 'Sleeping', 9: 'Commuting', 17: 'Working', 18: 'Commuting', 20: 'Eating', 22: 'Resting' }
time_now = localtime()
hour = time_now.tm_hour
for activity_time in sorted(activities.keys()):
if hour < activity_time:
print (activities[activity_time])
break
else:
print ('Unknown, AFK or sleeping!')
実行結果
Working
解説
10行に押し込みました。
ポイントは Time と from..import と for..else。
1行目
from time import localtime
ライブラリ「time」から、「localtime」をインポートします。
ライブラリ「time」は次のように説明されています。
time --- 時刻データへのアクセスと変換
このモジュールでは、時刻に関するさまざまな関数を提供します。
そのうちの「localtime」だけをインポートするようです。
「time」に含まれる他の関数にはアクセスできません。
それと、「localtime」をアクセスするときに「time.」は必要なくなります。そもそも「time」をimportしていないので、「time」が何なのかわからなくなります。
「time」をimportした場合は、次のようにアクセスします。
import time
time_now = time.localtime()
2行目
activities = {8: 'Sleeping', 9: 'Commuting', 17: 'Working', 18: 'Commuting', 20: 'Eating', 22: 'Resting' }
これは辞書ですね。
8時まで寝て、
9時まで通勤、
17時まで仕事、
18時まで通勤、
20時まで食事、
22時まで休憩。
3行目
time_now = localtime()
これは現在時刻を取ってくる処理です。
「local」というのは、各地域の時刻であることを意味します。
現在時刻であるので、実行する度に結果は異なります。
4行目
hour = time_now.tm_hour
「time_now」の「時」を取り出しています。
5行目
for activity_time in sorted(activities.keys()):
「sorted」は組み込み関数。
組み込み関数というのは、Pythonに組み込まれている関数のことで、import せずに使用できます。
「activities」「activities.keys()」「sorted(activities.keys())」は次の通り。
activities:
{8: 'Sleeping', 9: 'Commuting', 17: 'Working', 18: 'Commuting', 20: 'Eating', 22: 'Resting'}
activities.keys():
dict_keys([8, 9, 17, 18, 20, 22])
sorted(activities.keys()):
[8, 9, 17, 18, 20, 22]
「for」文は、これを一つずつ順に「activity_time」に入れて処理していきます。
6行目、7行目、8行目
if hour < activity_time:
print (activities[activity_time])
break
現在時刻の「時」が「activity_time」より小さかったら
「activities[activity_time]」を表示して
ループを終了します。
9行目、10行目
else:
print ('Unknown, AFK or sleeping!')
for-else文です。
「for-else」のセットは初めて見ました。
「for」文の構文を見てみましょう。
for_stmt ::= "for" target_list "in" expression_list ":" suite["else" ":" suite]
全ての要素を使い切ったとき、 else 節があればそれが実行され、ループは終了します。最初のスイートの中で break 文が実行されると、 else 節のスイートを実行することなくループを終了します。
「for」文内で「break」が実行されなければ「else」が実行される。
「for」文内で「break」が実行されれば「else」は実行されない。
ところで。
「else」節にある「AFK」とは何でしょう。
AFKとは、AFKの意味AFKとは、オンラインゲーム中に席を外している状態を指す言葉である。AFKは、away from keyboard の略で、日本語では「キーボードから離れる」という意味である。
なるほど。