0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-02-09

前回の続きです
【出典】「新・明解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の中で使うものと認識してた・・・。

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

0
2
0

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
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?