Python で文字図形を描く
【実習】まず次の2つのプログラムを入力・実行してください。
for i in range(5): for i in range(25):
for j in range(5): print('◯',end='')
print('◯',end='') if (i+1)%5==0:
print() print()
左のコードは2重ループ、右のコードは1回ループですが、実行結果はどちらも同じで、次のような文字図形が描けます。
◯◯◯◯◯
◯◯◯◯◯
◯◯◯◯◯
◯◯◯◯◯
◯◯◯◯◯
さて、その経験をもとにして、for 文を使って、下の文字図形を描いてください。
◇ for i in range(5):
◇◇ for j in range(i+1):
◇◇◇ print('◇',end='')
◇◇◇◇ print()
◇◇◇◇◇
☆☆☆☆☆◯ for i in range(5): for i in range(5):
☆☆☆☆◯◯ for j in range(5-i): for j in range(6):
☆☆☆◯◯◯ print('☆',end='') if j<5-i:
☆☆◯◯◯◯ for j in range(i+1): print('☆',end='')
☆◯◯◯◯◯ print('◯',end='') else:
print() print('◯',end='')
print()
ばかばかば for i in range(5): for i in range(25):
かばかばか if i%2==0: if i%2==0:
ばかばかば print('ば',end='') print('ば',end='')
かばかばか for j in range(2): else:
ばかばかば print('かば',end='') print('か',end='')
if i%2==1: if (i+1)%5==0:
print('か',end='') print()
print()
0 1 2 3 4 for i in range(5): for i in range(25):
5 6 7 8 9 for j in range(5): if i<10:
10 11 12 13 14 if i*5+j<10: print(end=' ')
15 16 17 18 19 print(end=' ') print(i,end=' ')
20 21 22 23 24 print(i*5+j,end=' ') if (i+1)%5==0:
print() print()
1 2 3 4 5 def print_num(n): s=''
10 9 8 7 6 if n<10: for i in range(1,26):
11 12 13 14 15 print(end=' ') if ((i-1)//5)%2==0:
20 19 18 17 16 print(n,end=' ') if i<10:
21 22 23 24 25 s=s+' '
for i in range(5): s=s+' '+str(i)
for j in range(1,6): else:
if i%2==0: s=' '+str(i)+s
print_num(i*5+j). if i<10:
else: s=' '+s
print_num(i*5-j+6). if i%5==0:
print() print(s)
s=''
最後のに、だいぶ苦労した。出来上がったものも、けっこう長い。うまくやれば、もっとスッキリ書けるんだろうな。
どなたか、良いアイデアを思いついた方がいらっしゃいましたら、是非お知らせください。いや、生徒たちの中から良いのが出てくるんだろうな、きっと。
ところで、こういうの(↓)はやめておいた方が良いのかな? 僕にはやれそうにないし。それとも、やらせてみようか?
まぁ適当にやれるものまで、やりたいものだけでも、やってみてください。
25 24 23 22 21
10 9 8 7 20
11 2 1 6 19
12 3 4 5 18
13 14 15 16 17
「あーでもない、こーでもない」とワイワイガヤガヤみんなでやるのがお勧めです。「出来た!」と思ったら「いや、こうやればもっとシンプルに書けそうだ」とか「なるほどその手があったか」とか、自然と主体性・多様性・協働性が動き始めることでしょう。
◇ ◇ ◇
〜 Python Python でお絵描きたぁいむ 〜
▷ Python で文字図形を描く
▷ Turtle と一緒にお絵描きたぁぃむ
▷ シェルピンスキーのギャスケット