質問編集履歴

2

わかりにくいということだったので、タイトルも変更

2018/04/28 21:31

投稿

morutemu
morutemu

スコア45

test CHANGED
@@ -1 +1 @@
1
- pythonのfor文を教えてくださ
1
+ pythonのif文をfor文変更した
test CHANGED
File without changes

1

内容が分かりにくいとのことでしたので、編集しました。

2018/04/28 21:31

投稿

morutemu
morutemu

スコア45

test CHANGED
File without changes
test CHANGED
@@ -133,3 +133,473 @@
133
133
 
134
134
 
135
135
  ```
136
+
137
+
138
+
139
+ # 追加
140
+
141
+ 上記質問で、わかりにくいとのことだったので質問内容を追加します。
142
+
143
+ もともと、上記プログラムのfor文でやりたかったことは、
144
+
145
+ 以下プログラムになります。
146
+
147
+ 簡単に言うとそれをぎゅっと縮めたくて、
148
+
149
+ for文を使ってみたのですが、それでうまくいかなくなりました。
150
+
151
+ じゃあ動いていた方使えばいいじゃないと感じるかもしれませんが、、
152
+
153
+ よろしくお願いします。
154
+
155
+
156
+
157
+ ```python
158
+
159
+ if now == "today":
160
+
161
+ if garbage == "燃":
162
+
163
+ print(msg[0] + msg[3] + msg[2])
164
+
165
+ elif garbage == "不":
166
+
167
+ print(msg[0] + msg[4] + msg[2])
168
+
169
+ elif garbage == "缶":
170
+
171
+ print(msg[0] + msg[5] + msg[2])
172
+
173
+ elif garbage == "資":
174
+
175
+ print(msg[0] + msg[6] + msg[2])
176
+
177
+ elif garbage == "紙":
178
+
179
+ print(msg[0] + msg[7] + msg[2])
180
+
181
+ elif garbage == "草":
182
+
183
+ print(msg[0] + msg[8] + msg[2])
184
+
185
+ elif garbage == "粗":
186
+
187
+ print(msg[0] + msg[9] + msg[2])
188
+
189
+ else:
190
+
191
+ print(msg[10])
192
+
193
+ elif now == "tommorow":
194
+
195
+ if garbage == "燃":
196
+
197
+ print(msg[1] + msg[3] + msg[2])
198
+
199
+ elif garbage == "不":
200
+
201
+ print(msg[1] + msg[4] + msg[2])
202
+
203
+ elif garbage == "缶":
204
+
205
+ print(msg[1] + msg[5] + msg[2])
206
+
207
+ elif garbage == "資":
208
+
209
+ print(msg[1] + msg[6] + msg[2])
210
+
211
+ elif garbage == "紙":
212
+
213
+ print(msg[1] + msg[7] + msg[2])
214
+
215
+ elif garbage == "草":
216
+
217
+ print(msg[1] + msg[8] + msg[2])
218
+
219
+ elif garbage == "粗":
220
+
221
+ print(msg[1] + msg[9] + msg[2])
222
+
223
+ else:
224
+
225
+ print(msg[11])
226
+
227
+ ```
228
+
229
+
230
+
231
+ もともとうまくいっていたプログラム全文↓
232
+
233
+
234
+
235
+ ```python
236
+
237
+ #!/usr/bin/env python
238
+
239
+ # -*- coding: utf-8 -*-
240
+
241
+
242
+
243
+ # +++ モジュール +++
244
+
245
+ from threading import Thread
246
+
247
+ #import RPi.GPIO as GPIO
248
+
249
+ import datetime
250
+
251
+ import schedule
252
+
253
+ import pandas
254
+
255
+ import time
256
+
257
+ import csv
258
+
259
+ import os
260
+
261
+
262
+
263
+ # +++ 変数 +++
264
+
265
+ # リマインド時間
266
+
267
+ spc_time = "7:20"
268
+
269
+
270
+
271
+ # 確認時間
272
+
273
+ start_time = "00:00:00"
274
+
275
+ end_time = "08:10:00"
276
+
277
+
278
+
279
+ # +++ クラス +++
280
+
281
+ class GarbageDayReminder(object):
282
+
283
+ # イニシャライズ
284
+
285
+ def __init__(self):
286
+
287
+ pass
288
+
289
+
290
+
291
+ # 日付処理
292
+
293
+ def date(self):
294
+
295
+ # 変数
296
+
297
+ FormatDay = "%Y/%m/%d "
298
+
299
+ FormatTime = "%H:%M:%S"
300
+
301
+
302
+
303
+ # 今日の日時を取得
304
+
305
+ now = datetime.datetime.now()
306
+
307
+
308
+
309
+ # 明日の日時を取得
310
+
311
+ tmr = now + datetime.timedelta(days=1)
312
+
313
+
314
+
315
+ # 1990-01-01対策の現在日付を追加
316
+
317
+ date = now.strftime(FormatDay)
318
+
319
+
320
+
321
+ # 今日、明日を振り分ける時間を作成
322
+
323
+ start = datetime.datetime.strptime(date + start_time, FormatDay + FormatTime)
324
+
325
+ end = datetime.datetime.strptime(date + end_time, FormatDay + FormatTime)
326
+
327
+
328
+
329
+ # 今日、明日日付取得の分岐
330
+
331
+ if start <= now <= end:
332
+
333
+ # 今日日付の取得
334
+
335
+ today = "{}/{}/{}".format(now.year, now.month, now.day)
336
+
337
+ return today ,"today"
338
+
339
+ else:
340
+
341
+ # 明日の日付を取得
342
+
343
+ tommorow = "{}/{}/{}".format(tmr.year, tmr.month, tmr.day)
344
+
345
+ return tommorow ,"tommorow"
346
+
347
+
348
+
349
+ # csv処理
350
+
351
+ def csv(self,date):
352
+
353
+ # csvファイルを読み込む
354
+
355
+ df = pandas.read_csv("./garbage_day.csv", encoding='cp932')
356
+
357
+
358
+
359
+ # 何のゴミの日か取得
360
+
361
+ garbage = df[df["日付"] == date]["ゴミ"].values[0]
362
+
363
+
364
+
365
+ return garbage
366
+
367
+
368
+
369
+ # リマインダー処理
370
+
371
+ def reminder(self, now, garbage):
372
+
373
+ msg = ["今日は",\
374
+
375
+ "明日は",\
376
+
377
+ "の日です",\
378
+
379
+ "燃やすごみ",\
380
+
381
+ "燃やさないごみ",\
382
+
383
+ "空き缶、スプレー缶、空きびん、廃蛍光管",\
384
+
385
+ "プラスチック製容器梱包、ペットボトル",\
386
+
387
+ "紙類ごみ",\
388
+
389
+ "せんてい枝、庭の草",\
390
+
391
+ "粗大ごみ",\
392
+
393
+ "今日のごみの日はありません",\
394
+
395
+ "明日のゴミの日はありません"
396
+
397
+ ]
398
+
399
+
400
+
401
+ if now == "today":
402
+
403
+ if garbage == "燃":
404
+
405
+ print(msg[0] + msg[3] + msg[2])
406
+
407
+ elif garbage == "不":
408
+
409
+ print(msg[0] + msg[4] + msg[2])
410
+
411
+ elif garbage == "缶":
412
+
413
+ print(msg[0] + msg[5] + msg[2])
414
+
415
+ elif garbage == "資":
416
+
417
+ print(msg[0] + msg[6] + msg[2])
418
+
419
+ elif garbage == "紙":
420
+
421
+ print(msg[0] + msg[7] + msg[2])
422
+
423
+ elif garbage == "草":
424
+
425
+ print(msg[0] + msg[8] + msg[2])
426
+
427
+ elif garbage == "粗":
428
+
429
+ print(msg[0] + msg[9] + msg[2])
430
+
431
+ else:
432
+
433
+ print(msg[10])
434
+
435
+ elif now == "tommorow":
436
+
437
+ if garbage == "燃":
438
+
439
+ print(msg[1] + msg[3] + msg[2])
440
+
441
+ elif garbage == "不":
442
+
443
+ print(msg[1] + msg[4] + msg[2])
444
+
445
+ elif garbage == "缶":
446
+
447
+ print(msg[1] + msg[5] + msg[2])
448
+
449
+ elif garbage == "資":
450
+
451
+ print(msg[1] + msg[6] + msg[2])
452
+
453
+ elif garbage == "紙":
454
+
455
+ print(msg[1] + msg[7] + msg[2])
456
+
457
+ elif garbage == "草":
458
+
459
+ print(msg[1] + msg[8] + msg[2])
460
+
461
+ elif garbage == "粗":
462
+
463
+ print(msg[1] + msg[9] + msg[2])
464
+
465
+ else:
466
+
467
+ print(msg[11])
468
+
469
+
470
+
471
+ # 中間処理
472
+
473
+ def intermediate(self):
474
+
475
+ # 日付処理
476
+
477
+ date, now = gdr.date()
478
+
479
+
480
+
481
+ # csv処理
482
+
483
+ garbage = gdr.csv(date)
484
+
485
+
486
+
487
+ # リマインダー処理
488
+
489
+ gdr.reminder(now, garbage)
490
+
491
+
492
+
493
+ # 指定時間処理
494
+
495
+ def specified_time(self):
496
+
497
+ schedule.every().day.at(spc_time).do(gdr.intermediate)
498
+
499
+ while True:
500
+
501
+ schedule.run_pending()
502
+
503
+ time.sleep(1)
504
+
505
+
506
+
507
+ # チェック処理
508
+
509
+ def button(self):
510
+
511
+ pass
512
+
513
+ #GPIO.setmode(GPIO.BCM)
514
+
515
+
516
+
517
+ #GPIO12pinを入力モードとし、pull up設定とします
518
+
519
+ #GPIO.setup(12,GPIO.IN,pull_up_down=GPIO.PUD_UP)
520
+
521
+
522
+
523
+ #while True:
524
+
525
+ # GPIO.wait_for_edge(12, GPIO.FALLING)
526
+
527
+ # sw_counter = 0
528
+
529
+
530
+
531
+ # while True:
532
+
533
+ # sw_status = GPIO.input(12)
534
+
535
+ # if sw_status == 0:
536
+
537
+ # sw_counter = sw_counter + 1
538
+
539
+ # if sw_counter >= 30:
540
+
541
+ # print("長押し検知!")
542
+
543
+ # gdr.intermediate()
544
+
545
+ # break
546
+
547
+ # else:
548
+
549
+ # print("短押し検知")
550
+
551
+ # break
552
+
553
+
554
+
555
+ # time.sleep(0.01)
556
+
557
+
558
+
559
+ # print(sw_counter)
560
+
561
+
562
+
563
+ # メイン処理
564
+
565
+ def main(self):
566
+
567
+ # 指定時間処理(マルチスレッド)
568
+
569
+ t = Thread(target=gdr.specified_time)
570
+
571
+ t.start()
572
+
573
+
574
+
575
+ # 実験用(上記プログラムで実行されるので、運用する際はgdr.intermediate()はなし)
576
+
577
+ gdr.intermediate()
578
+
579
+
580
+
581
+ # ボタン処理
582
+
583
+ #gdr.button()
584
+
585
+
586
+
587
+ # +++ 初期動作 +++
588
+
589
+ if __name__ == "__main__":
590
+
591
+ # GarbageDayReminderクラスをインスタンス化して実行
592
+
593
+ gdr = GarbageDayReminder()
594
+
595
+ gdr.main()
596
+
597
+
598
+
599
+ ```
600
+
601
+
602
+
603
+ これでわかりますでしょうか??
604
+
605
+ わからない場合は、どんどん質問おねがいします!