見出し画像

【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 --- 時刻データへのアクセスと変換
このモジュールでは、時刻に関するさまざまな関数を提供します。

https://docs.python.org/3/library/time.html

そのうちの「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 節のスイートを実行することなくループを終了します。

https://docs.python.org/3/reference/compound_stmts.html#the-for-statement

「for」文内で「break」が実行されなければ「else」が実行される。
「for」文内で「break」が実行されれば「else」は実行されない。


ところで。

「else」節にある「AFK」とは何でしょう。

AFKとは、AFKの意味AFKとは、オンラインゲーム中に席を外している状態を指す言葉である。AFKは、away from keyboard の略で、日本語では「キーボードから離れる」という意味である。

weblio

なるほど。

この記事が気に入ったらサポートをしてみませんか?