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

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

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

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

Q&A

解決済

2回答

2519閲覧

計算結果の数だけ★を表示

amagrammer

総合スコア13

Python

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

0グッド

0クリップ

投稿2017/08/27 07:44

ネストループを使って下記のようなアスタリスクで直角三角形(一辺が10個の★)を作る宿題に挑戦中です。

計算結果の数字と同じ数だけ星を表示させる手法
がわからず困っています。


★★
★★★
★★★★
★★★★★
★★★★★★
★★★★★★★
★★★★★★★★
★★★★★★★★★
★★★★★★★★★★★

###試したこと
for num in range(0,9,2):
for x in range(1,3):
print(num, x)

で、ネストで1〜10まで作ることはできたのですが、やはりその数だけ星を示す方法がわかりません。初心者で呆れるような質問かとは思いますが、ご存知の方いらしたら教えていただけませんでしょうか。

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

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

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

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

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

LouiS0616

2017/08/27 11:55

試したことの、『ネストで1~10まで作ることができた』という発言の真意がわからないのですが... range(1, 11)ではいけない理由がなにかあるのですか?
guest

回答2

0

BAがついたようなので、こういうのもあるよと紹介しておきます。

  • 二重ループを用いる方法

Python

1for i in range(10): 2 for j in range(i): 3 print('*', end='') 4 print()
  • 出力する文字列を更新する方法

Python

1my_print = '*' 2for i in range(10): 3 print(my_print) 4 my_print += '*'
  • 毎回文字列を演算する方法

Python

1for i in range(10): 2 print('*' * (i+1))

投稿2017/08/27 18:21

LouiS0616

総合スコア35660

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

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

0

ベストアンサー

ここで答えを書いてしまうと宿題にならないと思うので・・・。

1辺が10個の文字からなる直角三角形ですよね?
あなたが書いた完成予想図から読み取れば、上から下に1つずつ文字を増やしながら*なり★なりを書いていく。それを多重ループを使い再現せよ、とのことと読み取ります。

一つ目のループは縦をカウントします。1から10まで。python なので range(10)で0から9まででもよいでしょう。
二つ目のループは横をカウントします。今、例としてrangeを使ったので、横もrangeでよいでしょう。range()の中は1つ目のループの値を入れてあげれば「0から0まで」から「0から9まで」が実現できるでしょう。

そうしたら、都度*なり★なりを書いてあげる。
二つ目のループが終わったら改行を入れる。

これでどうでしょう?
改行しない書き方などは、調べてみてください。

投稿2017/08/27 08:29

Marbow

総合スコア55

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

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

amagrammer

2017/08/27 08:50

ご丁寧にありがとうございます。 多重ループを使って1〜10までのカウントを作ることは、上記の式=Aでできたのですが、まさにこの部分 >>都度*なり★なりを書いてあげる。 ができずに困っています。 print(num, x)の部分を少し改良してその数だけ★を書くというのはできないものでしょうか。 上記の式=Aだと一行ごとに★を書くことができないということでしょうか。 縦のカウントで1から10までを表して横で0から9までとすると 10 11 12 13 14 15 16 17 18 19 20 21 22 23 … 98 99 となってしまいます。 A= for num in range(0,9,2): for x in range(1,3): print(num, x)
Marbow

2017/08/27 12:58 編集

ループが一つでいいのなら for i in range(10): print "★"*(i+1) で終わりです。 それぞれの命令がどんな働きをしているのか、もう一度よく調べてみてください。
amagrammer

2017/08/27 14:52

print ""*(x)がキモでした。 目から鱗、大変助かりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問