アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんなコードが見つかったのですが、これで17:00までスリープできるのでしょうか?
また、これが正しいならシンプルなコードに見えるのですがどのようにしたら簡単に思いつきますか?
while datetime.datetime.now().hour != 17 or datetime.datetime.now().minute != 0:
time.sleep(1)

A 回答 (5件)

while datetime.datetime.now().hour != 17 or datetime.datetime.now().minute != 0:


の読み解き方ですが、
while 条件:
 処理A
の場合、条件が成立する間、処理Aを実行します。
条件は時刻が17:00でない間になります。
17:00でないということは、時が17時でないか、分が0分でないかの
どちらかの場合です。
16:00は、時が17時でないので条件成立。
17:01は、分が0分でないので条件成立。
17:00は、時が17時かつ分が0分なので、条件成立しない。
となります。

個人的は、このことで頭を悩ますよりは、私が提示したスクリプトの方が
直感的にわかりやすいかと思います。
スクリプトが多少長くなっても、誰にもわかりやすいほうが良いかと思います。
    • good
    • 0

具体的な環境が提示されなかったのでとりあえず、コマンドプロンプトで実行できる環境があるという前提で書きます。



これが、あなたが提示したスクリプトの確認用スクリプトです。
https://ideone.com/4mHUMs

これが、私が提示したスクリプトの確認用スクリプトです。
https://ideone.com/dBle4d
(インデントが乱れるため、上記のURLにアップしました)

あなたが提示したスクリプトを実行すると以下のようになります。
1.最初に以下の3行が表示されます。
14
2
IN
14と2は、14時2分にスクリプトを開始した時刻を表示しています。
INは、これからスリープのためのwhile文に入りますという表示です。

2.17時0分になり、whileを終了すると、以下の3行が表示されます。
OUT
17
0
OUTは、whileを抜けた表示です。
17と0はその時の、時刻です。(17時0分)

尚、このスクリプトを、14時に開始すると、17時まで完了を待たなければなりません。
17時まで待てれば、問題ありませんが、待てない場合は、
hour != 17 を hour != 15に変えてください。
そうすると15時0分に終了します。

もう一つの私の提示したスクリプトも同様にして確認できます。
    • good
    • 0

>なお、コードについてですが、ややこしく私にははこれが正しく動作するのかすら確認できませんでした。

どのように考えれば正しく動いていると理解できますでしょうか?

環境はwindowsでしょうか。そうであれば、コマンドプロンプトで
pythonのスクリプトを実行することは可能でしょうか。
可能であれば、確認方法を提示できます。

もしくは、
環境はlinuxでしょうか。そうであれば、端末(コマンドライン)で
pythonのスクリプトを実行することは可能でしょうか。
可能であれば、確認方法を提示できます。

どちらかで、可能であれば、その旨補足してください。
    • good
    • 0
この回答へのお礼

書き方が悪くすみません。Pythonの動く環境はあるのですが、このコードがややこしく頭で追えず、コードがなぜ正しく動くのか理解できず、どのように考えれば理解できるか知りたく思っています。

お礼日時:2023/09/28 13:53

No1です。


if dt.hour == 11 and dt.minute == 0:
は誤りです。
if dt.hour == 17 and dt.minute == 0:
に訂正します。
失礼しました。
    • good
    • 0

>こんなコードが見つかったのですが、これで17:00までスリープできるのでしょうか?



回答:はい、できます。スクリプトは正しく動作します。


>また、これが正しいならシンプルなコードに見えるのですがどのようにしたら簡単に思いつきますか?

回答:私が作ったわけではないので、どのようにしたら、思いつくかは作った人に尋ねるのが、最も手っ取り早いかと。
通常は、以下のようなスクリプトの方が、わかりやすいかと思います。
(シンプルではないかもしれませんが)

while True:
dt = datetime.datetime.now()
if dt.hour == 11 and dt.minute == 0:
break
time.sleep(1)

インデントが崩れていますので、その点はご了承ください。
(このサイトに投稿するとインデントが崩れます)
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。

コードありがとうございます。行数が増えますが理解はしやすいですね。

質問のコードは作成者がわからないのですが、!=とorが使ってありどのような考えで作ったの気になっています。

なお、コードについてですが、ややこしく私にははこれが正しく動作するのかすら確認できませんでした。どのように考えれば正しく動いていると理解できますでしょうか?

お礼日時:2023/09/28 12:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A