hayashi0001
@hayashi0001 (S hayashi)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

python break使いこなせてない

Q&A

Closed

解決したいこと

#ifで指定した文字以外が文字列にあったらfor文から抜けたい

問題

breakしてほしくないのに勝手にbreakしまう
このコードだと一周目で終わってしまう

該当するソースコード

time = 0

n = int(input())
arr = input()

for i in range(n):
    if arr[i] == 'c':
        time = time + 240
    if arr[i] == 'b':
        time = time + 180
    if arr[i] == 'p':
        time = time + 180
    if arr[i] == 'h':
        time = time + 90
    if arr[i] == 'o':
        time = time + 50
    
    else:
        break
print(time)

自分で試したこと

elseをifで書いてみたりしたがダメだった。

0

2Answer

2つ目以降のifelifですね。
また、文字列を直接for string in arr:などforで渡せば、1文字ずつやっていくこともできます。

time = 0

n = int(input())
arr = input()

for i in range(n):
    if arr[i] == 'c':
        time = time + 240
    elif arr[i] == 'b':
        time = time + 180
    elif arr[i] == 'p':
        time = time + 180
    elif arr[i] == 'h':
        time = time + 90
    elif arr[i] == 'o':
        time = time + 50
    
    else:
        break
print(time)
4Like

Comments

  1. 机上の横レスですみません。
    breakをとると、どうでしょうか?

    time = 0
    
    arr = input()
    n   = len(arr)
    
    for i in range(n):
        if arr[i] == 'c':
            time += 240
        if arr[i] == 'b':
            time +=  180
        if arr[i] == 'p':
            time +=  180
        if arr[i] == 'h':
            time += 90
        if arr[i] == 'o':
            time += 50
    print(time)
    
  2. 机上の横レスですみません。
    breakをとると、どうでしょうか?

    その変更はロジックを変えます.もう少し慎重な検証をお願いします.

    >5
    >cpoac
    710 #expected '470'
    
  3. 既に回答されている方がいらっしゃいますが……
    すぐにループを抜けてしまうこと自体については、

        if arr[i] == 'o':
            time = time + 50
        else:
            break
    

    ここが一まとまりの構文として認識されていることが原因なように思います。また、各arr[i]の判定後にそのままループの最後まで進んでしまうようになっています、つまり、各ループで、arr[i] == 'o'でない場合breakしてしまうことになっています。
    今回の目的に向いている妥当な実装方法としては、既に回答されているelifを繋げていくというのが良いと思われます。ただ、余談として別な方法を挙げるとすると、質問内のコードの各if文での判定後の実行内容の最後にcontinueを付けて、処理を打ち切って次のループを開始するというものがあります。

        # ...
        if arr[i] == 'c':
            time = time + 240
            continue
        if arr[i] == 'b':
            time = time + 180
            continue
        # ...
    

    今回はelifの方が綺麗に仕上がると思うので、あくまで余談です。

  4. @hayashi0001

    Questioner

    返信遅れてすみません。
    教えてもらった回答を書いて満足してしまうところがあったので、このように解説いただけると、とても助かります。ありがとうございます。

机上ですみません。

で、

結果

どうでしょうか?

自分の価値観、正義を振りかざしても、qiitaの主旨にマッチしないと思います。

正義は正しいのはあなた、だけかもしれませんよ!

間違いを許容する度量を養うことを推奨します。

C言語 の返信はあなたにとって意味があるのでしょうか?

私なら、無言です。

争い(嵐)を望んでいるとしか、私は思えません。

私はあなたに反省を求めませんが、私は断固拒否します。

楽しいサイトを希望します。

0Like

Comments

  1. 問題の趣旨すらよく理解されていない回答をつけられても困るんですけどね…
    「かつ丼が喰いたい」と言って「海鮮丼を食えばええやん」と返されるのが自然な受け答えだとしたらコミュニティって成り立たないと思うんですよね.
    単に誤っているから指摘しているのではなく「あまりに質問への答えになってなさすぎる」ので指摘しています.それこそ荒らしに他なりませんので.以上.

Your answer might help someone💌