search
LoginSignup
2

posted at

updated at

「新・明解Pythonで学ぶアルゴリズムとデータ構造」で勉強日記#3

前回の続きです
【出典】「新・明解Pythonで学ぶアルゴリズムとデータ構造」

すごい中途半端なスタート・・・。

繰り返しの過程における条件判定(その3)

for文の続きですね。前回までは改行をしないプログラムでしたが、ここでは改行を指定します。
次の文は*をn個w回改行します

list1-14
#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文が処理回数を増やすので効率的でないということですね。
変更したのが↓で

list1-15
#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では負の数を代入すると処理できなかったので修正版として↓

list1-16
#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

辺と面積が整数値である長方形

list1-17
#縦横が整数で面積が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文が実行されると、ループ本体内の後続部の実行がスキップされて、プログラムの流れが判定に戻る。'

コンテニューと聞くと続きそうなイメージが先行されちゃうんですが、後続部が飛ばされて処理すんですねー。混乱しそう。

list1-18
#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の中で使うものと認識してた・・・。

本日は以上です。ありがとうございました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2