前回の続きです
【出典】「新・明解Pythonで学ぶアルゴリズムとデータ構造」
すごい中途半端なスタート・・・。
#繰り返しの過程における条件判定(その3)
for文の続きですね。前回までは改行をしないプログラムでしたが、ここでは改行を指定します。
次の文は*をn個w回改行します
#n個の記号文字*をw個ごとに改行しながら表示(その1)
print('記号文字*を表示します。')
n = int(input('全部で何個:'))
w = int(input('何個ごとに改行:'))
for i in range(n):
print('*', end='')
if i % w == w-1:
print() #改行
if n % w:
print() #改行
そして例のごとくその1はif文が処理回数を増やすので効率的でないということですね。
変更したのが↓で
#n個の記号文字*をw個ごとに改行しながら表示(その2)
print('記号文字*を表示します。')
n = int(input('全部で何個:'))
w = int(input('何個ごとに改行:'))
for _ in range(n // w):
print('*' * w)
rest = n % w
if rest:
print('*' * rest)
また_出てきましたね。変数を置くまでもない時に使えばいいのでしょうか?
そしてまた商と余りを使った書き方ですね。
商の回数for文を回して(改行)w個並べ、余りの文は最後の行に余りの数だけ*を並べるというようなイメージでしょうか?
#正の値の読み込み
ここでは、負の数を消す処理をしていますね。
初回のlist1-8では負の数を代入すると処理できなかったので修正版として↓
#1からnまでの総和を求める(nに正の整数値を読み込む)
print('1からnまでの総和を求めます。')
while True:
n = int(input('nの値:'))
if n > 0:
break
sum = 0
i = 1
for i in range(1, n + 1):
sum += i
i += 1
print(f'1から{n}までの総和は{sum}です。')
'pythonでは後判定繰返しのための繰返し文が提供されないため、前判定繰り返し文とbreak文を組み合わせる必要がある'
コラム1-11:for文終了時のカウンタ用変数の値
コラムでちょこちょこ注意点を書いてくれていてありがたいです。
while i <= n: 繰返し終了時のiの値はn + 1
for i in range(開始値, n + 1):繰り返し終了時のiの値はn
#辺と面積が整数値である長方形
#縦横が整数で面積がareaの長方形の辺の長さを列挙
area = int(input('面積は:'))
for i in range(1, area + 1):
if i * i > area: break
if area % i : continue
print(f'{i}x{area // i}')
'continue文が実行されると、ループ本体内の後続部の実行がスキップされて、プログラムの流れが判定に戻る。'
コンテニューと聞くと続きそうなイメージが先行されちゃうんですが、後続部が飛ばされて処理すんですねー。混乱しそう。
#10 ~99の乱数をn個生成(13が生成されたら中断)
import random
n = int(input('乱数は何個:'))
for _ in range(n):
r = random.randint(10, 99)
print(r, end=' ')
if r == 13:
print('\n事情により中断します。')
break
else:
print('\n乱数生成終了')
'else節はbreakが実行されなかったときのみ実行される。'
今までifの中で使うものと認識してた・・・。
本日は以上です。ありがとうございました。