見出し画像

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 と一緒にお絵描きたぁぃむ
▷ シェルピンスキーのギャスケット


この記事が気に入ったらサポートをしてみませんか?