質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

4706閲覧

市松模様の書き方について(Python)

cg2p8

総合スコア1

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/11/18 10:48

編集2021/11/18 14:46

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
市松模様をなるべく少ない文量で書きたいです。

発生している問題・エラーメッセージ

AttributeError Traceback (most recent call last) <ipython-input-88-a132df557ecd> in <module> 5 for j in range (0,10): 6 c2.append(Rectangle((i, j), 1, 1, color="blue")) ----> 7 show_shape([c1,c2]) <ipython-input-1-58f849606168> in show_shape(patches) 14 # 座標平面に図形を加える 15 for patch in patches: ---> 16 ax.add_patch(patch) 17 # 図形が収まる広さに調整 18 ~/opt/anaconda3/lib/python3.8/site-packages/matplotlib/axes/_base.py in add_patch(self, p) 2028 Add a `~.Patch` to the axes' patches; return the patch. 2029 """ -> 2030 self._set_artist_props(p) 2031 if p.get_clip_path() is None: 2032 p.set_clip_path(self.patch) ~/opt/anaconda3/lib/python3.8/site-packages/matplotlib/axes/_base.py in _set_artist_props(self, a) 955 def _set_artist_props(self, a): 956 """Set the boilerplate props for artists added to axes.""" --> 957 a.set_figure(self.figure) 958 if not a.is_transform_set(): 959 a.set_transform(self.transData) AttributeError: 'list' object has no attribute 'set_figure'

該当のソースコード

from matplotlib import pyplot as plt from matplotlib.patches import * # Circle, Ellipse 等 def show_shape(patches): ax = plt.gca() if isinstance(patches, Patch): patches = [patches] for patch in patches: ax.add_patch(patch) plt.axis('scaled') ax.set_aspect('equal') plt.show() c1 = Rectangle((0, 0), 10, 10, color="pink") c2 = [] for i in range (0,10): for j in range (0,10): c2.append(Rectangle((i, j), 1, 1, color="blue")) show_shape([c1,c2])

試したこと

最初は全部書き出していたのですが、なるべく少ない文量で書けと言われ、for文を使いましたがうまく行けません。また、if,else文も使ったのですがうまくいかず消してしまいました。

補足情報(FW/ツールのバージョンなど)

教授にもっと短くかけと言われただけでアドバイスなどはいただいていません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/11/18 10:52 編集

> 最初は全部書き出していたのですが、なるべく少ない文量で書けと言われ 誰から言われたのでしょうか? その人からアドバイスはもらえませんでしたか? エラーメッセージは省力しないで全部掲載してください。
BeatStar

2021/11/18 10:53

情報はちゃんと提示してください。 純粋なPythonにRectangleなんてありません。
lehshell

2021/11/18 11:14

Rectangle が何かわかりませんが、やりたいことは #show_shape([c1,c2]) show_shape([c1] + c2) ではありませんか?
guest

回答2

0

かなり頑張ってみました。元コードから数文字しか減らせていませんが。

Python

1from matplotlib import pyplot as p,colors as c 2import numpy as n 3p.imshow(n.indices((10,10)).sum(axis=0)%2,cmap=c.ListedColormap(['pink','blue'])) 4p.show()

イメージ説明

投稿2021/11/18 11:51

編集2021/11/18 12:03
can110

総合スコア38278

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Rectangle の signature を見ると、おそらく matplotlib.patches にある Rectangle を使っているのかと思います。

python

1import matplotlib.pyplot as plt 2from matplotlib.patches import Rectangle 3 4N = 10 5color = ('pink', 'blue') 6 7fig = plt.figure(figsize=(10, 10)) 8ax = fig.add_subplot(111) 9ax.set_xlim([0, N]) 10ax.set_ylim([0, N]) 11 12for i in range (0, N): 13 for j in range (0, N): 14 ax.add_patch(Rectangle((i, j), 1, 1, color=color[(i+j)%2])) 15 16plt.show()

plot

投稿2021/11/18 13:43

編集2021/11/18 15:50
melian

総合スコア19865

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cg2p8

2021/11/18 14:50

ありがとうございます! まだ簡単なfor文やif文しか習っていないのですがそれだけではかけないものなのでしょうか?
melian

2021/11/18 15:01

シェルで実行して、市松模様を文字で表示するなら可能かと思いますが、回答の様にグラフィカルにしたいのであればライブラリを利用するしかないでしょうね。
cg2p8

2021/11/18 15:42

p = [] for i in range (0,10): for j in range (0,10): if i % 2 == 0: if j % 2 == 0: p.append(Rectangle((i,j),1,1,color = "pink")) else: if j % 2 == 1: p.append(Rectangle((i,j),1,1,color = "pink")) show_shape(p) これだと一応白ピンクの2色なのですが青を入れられないんですよね、、、
melian

2021/11/18 15:51 編集

う〜ん、そこで if 文を使ってしまったら「なるべく少ない文量で書けと言われる」のではないですかね。 color=color[(i+j)%2] としている部分の (i+j)%2 の意味を考えてみる方がよいかと思いますよ。
cg2p8

2021/11/19 00:06

わかりました! ご教授くださりありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問