復活_孫と遊ぶためのPython日記(6)

今日の電話ではすでに孫のカンちゃんはAnacondaにオープンCVをインストールして
パソコンに内蔵のカメラで写真や動画を撮るレベルになっているらしい。
今は音声の取り込みと活用に取り組んでいるようだ。

まったく追いつけない。孫は大きく育っているのに爺はどんどん置いてけぼり状態だ。
この数日は新たに購入した「みんなのPython」(今後は「みんPy」と呼ぶことにする)の学習で手いっぱいだ。

「みんPy」は本家Pythonを拡張したAnaconda(アナコンダ)をインストールして使う前提になっている。これができない。
職場に朝早くいって試し昼休みにも試したが、何度やってもうまくできない。

いずれ追いつかなければならないからどうしてもAnacondaをインストールしたいのだ。

結局、自宅にパソコンを持ち帰り、再度試すと難なく出来た。
職場の無線Wi-Fiのセキュリティ対策が原因だったようだ。

おかげでこの週末はすべて環境設定に費やしてしまった。
ようやく環境を更新して再開できたのは今日の朝だった。

ところで、このPython修行の当面の目標は迷路を自動で通り抜けるコードを作ることにある。
ようやく入れたAnacondaには申し訳ないが、まだうまく使えないので本家Pythonに付属するIDLEで、tkintercanvasを用いて作業を進める。

はてなのブログにコピペすると、インデントが無視されるから、以下のコードはその点に注意。
備忘録です。

##ーーー本日のコード:迷路の準備1(「たのPy」を参考にして試作)−−−−

from tkinter import *
import random
import time

#行の初めの_はインデントを表す

class Ball:
_____def __init__(self,canvas,color):
________self.canvas = canvas
________self.id = canvas.create_oval(10, 10, 30, 30, fill=color)
________self.canvas.move(self.id, 245, 120)

________self.x = -3
________self.y = 0
________self.canvas_height = self.canvas.winfo_height()
________self.canvas_width = self.canvas.winfo_width()

_____def draw(self):
________xa = 200 #xa=200 #X軸の原点側:いずれinputで入力(>100)
________xb = 400 #xb=400 #X軸の遠方側:いずれinputで入力(<400)
________self.canvas.move(self.id,-1,0)
________self.canvas.move(self.id,self.x,self.y)
________pos = self.canvas.coords(self.id)
________if pos[1] <= 0:
___________self.y = 0
________if pos[3] >= self.canvas_height:
___________self.y = 0
________if pos[0] <= xa:
___________self.x = 3
________if pos[2] >= xb:
___________self.x = -3
tk=Tk()
tk.title("迷路の準備1")
tk.resizable(0,0)
tk.wm_attributes("-topmost",1) #画面のトップに表示する
canvas = Canvas(tk, width= 600, height= 500)
canvas.pack()

# 枠を描く

xa = 200 #枠のX軸原点側座標
xb = 400 #枠の遠方側X座標
ya = 120 #枠のY軸原点側座標
yb = 160 #枠のY軸遠方側座標
yc = 40 #枠のY軸方向増加分

canvas.create_rectangle(xa, ya, xb, yb)

for i in range(0,3):
____ya = ya + yc
____yb = yb + yc
____canvas.create_rectangle(xa, ya, xb, yb)
tk.update()

# ボールを描く
ball = Ball(canvas,"green")
while True:
____ball.draw()
____tk.update_idletasks()
____tk.update()
____time.sleep(0.01)


=======実行結果(ただ一段目の枠の中を左右に動くだけのコード)======
動画でないからわからないなあ。