プログラム言語の文法を覚えても
どうやって書いたら良いか
まだまだ解らないよーって人多いと思います。
そんな方のためのプログラミング上達講座です。
考えたい方は動画を止めて
プログラムを考えてみてください。
解説動画はこちら
今回のテーマは「星を書いてみる」です。
次のような星を描く関数を作成してみましょう。
条件:
n = 行数
def star(n):
処理
※星や口は全角
初級の問題:
n段目にn個の星を描く
例えば
star(5)
と実行したら、次のように感じに
表示されるような関数を作りましょう。
★
★★
★★★
★★★★
★★★★★
中級の問題:
n段に三角形になるように星を描く
star(5)
口口口口★口口口口
口口口★★★口口口
口口★★★★★口口
口★★★★★★★口
★★★★★★★★★
上級の問題:
さあ、考えてみましょう。
----回答----
さて回答編です。
初級編:
まずprint関数で文字を出力できます。
n段目にn個の星ということで
毎回個数が変わりますので
このような繰り返しを行うには
for文を用います。
range関数を用いると
数値の代わりになるものを
生成できます。
数値は0から始まるので
1を足してあげます。
Pythonでは文字に関しては
*で繰り返しを表現できるので
print関数で文字をn段分だけ
表示するようにすれば完成です。
中級編:
まず、引数で入力された行数で
総量を求めておきます。
星の個数が決まれば
全体から引いて2で割れば
外側の口の個数になります。
このような関数になりました。
上級編:
上級は解くのに時間がかかると思います。
まず入力された行数が奇数の時と
偶数の時で処理が変わります。
参考例なので
結果があっていれば正解です。
さていかがだったでしょうか?
プログラミングの考え方が
身についてきましたでしょうか。
引き続きやっていきたいと思いますので
プログラミングを上達したい方は
解いてみてください。
それでは。
どうやって書いたら良いか
まだまだ解らないよーって人多いと思います。
そんな方のためのプログラミング上達講座です。
考えたい方は動画を止めて
プログラムを考えてみてください。
解説動画はこちら
今回のテーマは「星を書いてみる」です。
次のような星を描く関数を作成してみましょう。
条件:
n = 行数
def star(n):
処理
※星や口は全角
初級の問題:
n段目にn個の星を描く
例えば
star(5)
と実行したら、次のように感じに
表示されるような関数を作りましょう。
★
★★
★★★
★★★★
★★★★★
中級の問題:
n段に三角形になるように星を描く
star(5)
口口口口★口口口口
口口口★★★口口口
口口★★★★★口口
口★★★★★★★口
★★★★★★★★★
上級の問題:
n段にダイヤを描くように星を描く
star(9)
口口口口★口口口口
口口口★口★口口口
口口★口口口★口口
口★口口口口口★口
★口口口口口口口★
口★口口口口口★口
口口★口口口★口口
口口口★口★口口口
口口口口★口口口口
star(10)
口口口口★★口口口口
口口口★口口★口口口
口口★口口口口★口口
口★口口口口口口★口
★口口口口口口口口★
★口口口口口口口口★
口★口口口口口口★口
口口★口口口口★口口
口口口★口口★口口口
口口口口★★口口口口
※偶数個と奇数個の時で処理が変わり
真ん中からは折り返す
真ん中からは折り返す
さあ、考えてみましょう。
----回答----
さて回答編です。
初級編:
まずprint関数で文字を出力できます。
n段目にn個の星ということで
毎回個数が変わりますので
このような繰り返しを行うには
for文を用います。
def star(n): for i in range(n): print('★'*(i+1)) star(5)
range関数を用いると
数値の代わりになるものを
生成できます。
数値は0から始まるので
1を足してあげます。
Pythonでは文字に関しては
*で繰り返しを表現できるので
print関数で文字をn段分だけ
表示するようにすれば完成です。
中級編:
まず、引数で入力された行数で
総量を求めておきます。
ピラミッド型に星を出力する個数は
行数 x 2 -1 個になります。
行数 x 2 -1 個になります。
次に出力を
星の左側の口
★
星の右側の口
★
星の右側の口
というように3分割し
それぞれの個数を計算します。
それぞれの個数を計算します。
星の個数が決まれば
全体から引いて2で割れば
外側の口の個数になります。
このような関数になりました。
def star(n): tmp = n*2-1 for i in range(n): s = ((i+1)*2-1) k = (tmp - s)//2 res = '口'*k + '★'*s + '口'*k print(res) star(5)
上級編:
上級は解くのに時間がかかると思います。
まず入力された行数が奇数の時と
偶数の時で処理が変わります。
ひし形の上部と下部では
処理が変わることに注意が必要です。
処理が変わることに注意が必要です。
・ひし形の左の口
・ひし形に描くための★の外枠と口
・ひし形の右の口
と分けて考えて
各部分の個数を計算して繋げれば
正解にたどり着けます。
if文の条件分岐で個数を先に考え
出力する1行分の文字を考えます。
コードはこうなりました。
各部分の個数を計算して繋げれば
正解にたどり着けます。
if文の条件分岐で個数を先に考え
出力する1行分の文字を考えます。
コードはこうなりました。
def star(n): for i in range(n): s = (i+1)*2-1 k = (i-n//2) if (i+1>n//2) else (n - s)//2 w = (n-(k*2)-2) if (i+1>n//2) else (i*2 if n%2==0 else i*2-1) res = '口'*k if (i+1)==1 or (i+1)==n: res += '★★' if n%2==0 else '★' else: res += '★' + '口'*w + '★' res +='口'*k print(res)
参考例なので
結果があっていれば正解です。
さていかがだったでしょうか?
プログラミングの考え方が
身についてきましたでしょうか。
引き続きやっていきたいと思いますので
プログラミングを上達したい方は
解いてみてください。
それでは。
コメントする