メインコンテンツへスキップ
見出し画像

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


     
     
    情報科・数学科教員にして   作家・旅人・芸人 AI評論家・火山ハンター

    あなたへのおすすめ