質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

541閲覧

時間ごとの条件分岐について

tenten2525

総合スコア1

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/02/21 09:49

編集2022/02/21 11:35

Pythonを勉強中で、本当に初心者な質問をして申し訳ないのですが、教えて下さい。

x=30 y=0 として、
①10秒毎に下記の条件を実行
②x >= 10のとき、x -= 10
③②が実行出来た時、1秒毎に y += 1 が始まる。
④②が実行出来なかった時は、再び②の条件を満たすまで止まる。

時間で書くと以下のような状況になります
0秒後 x=30 y=0
1秒後 x=20 y=1
2秒後 x=20 y=2
3秒後 x=20 y=3
・・(略)・・
10秒後 x=10 y=10
11秒後 x=10 y=11
12秒後 x=10 y=12
・・(略)・・
20秒後 x=0 y=20
21秒後 x=0 y=21
・・(略)・・
30秒後 x=0 y=30
x >= 10を満たしていないのでここでストップ
何かしらの要因でxに10追加された場合、yの値はそのままに条件を実行
0秒後 x=10 y=30
1秒後 x=0 y=31
2秒後 x=0 y=32

この10秒毎のコードの中に1秒毎のコードが混ざる式がかけずに困っています。
諦めて②を x >= 10のとき、x -= 10 and y += 10 をする という文にしようかとも思いましたが、諦めきれなかったのでご質問します。宜しくお願い致します。

x = 30 y = 0 def x_loop(): global x global y win.after(10000,x_loop) #10秒ごとに実行   if (x>=10):    x -= 10 # 1秒ごとに実行 ?    y += 1 else:    return # 上記のif文が成り立つ時に1秒ごとに実行?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakaiY

2022/02/21 10:30

現状のコードでいいので、提示しましょう。アドバイスしようがありません。
tenten2525

2022/02/21 10:33

すみません、コードを書く場所がわからず一先ず先に質問出してました、失礼しました。
TakaiY

2022/02/21 11:16

「②x >= 10のとき、x -= 10 and 1秒毎に y += 1 をする。」 の意味がよくわかりません。 x>10 の間 1秒毎にyを1ずつ増やすということ?
takasima20

2022/02/21 11:34

1秒単位でループする中で10秒か判定すれば?
guest

回答1

0

ベストアンサー

■ 10秒ごとにxの値を調べて処理する。
■ 1秒ごとに、条件yを調べて処理する。
■ 条件yは、xの減算処理が実行されたときにONになって、xの値が0(以下)になったときにOFFになる

という処理を作ってみました。

python

1def x_loop(): 2 global x 3 global y_flag 4 5 if x >= 10: 6 x -= 10 7 y_flag = True 8 9 win.after(10000,x_loop) #10秒ごとに実行 10 11def y_loop(): 12 global x 13 global y 14 global y_flag 15 16 if yflag 17 y += 1 18 19 if x <= 0: 20 yflag = False 21 22 win.after(1000,y_loop) #10秒ごとに実行 23 24 25x_loop() 26y_loop()

global変数を使うのはあまり好きではないけど。

投稿2022/02/21 12:12

TakaiY

総合スコア12763

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tenten2525

2022/02/21 12:49

解答並びにご指摘のほど、有難うございました。 おかげさまで自分のやりたいコードを組むことが出来ました。 一点、もしお時間あればで良いのですが、global関数が嫌われているのは、やはり大量のコードを書く際にどこに記載があるかわかりにくくなるからでしょうか?
TakaiY

2022/02/21 14:07

global変数のよくないところ ■ その関数がどのような作用をするのかわかりにくいこと。 呼び出したときの引数でない値を参照して、返り値でない値を変更しているから。ですね。 ■ 特に並列処理をしていたりすると、別の場所で値が変更されちゃってるかもしれない など 適切に管理して使えば便利ではありますが、気を付けて使う必要があると思っています。
tenten2525

2022/02/22 03:34

ご丁寧な説明、重ね重ね有難うございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問