
[code]

    inin = input().rstrip().split(' ')
    sakana, poi, Durability = int(inin[0]), int(inin[1]), int(inin[2])
    
    d = Durability
    count = 0
    
    def check(d, w, count, poi):
        if d > w:
            count += 1
            d = d - w
        else:
            poi -= 1
            if poi > 0:
                d = Durability
            check(d, w, count, poi)
    
    for _ in range(sakana):
        w = int(input())
    
        try:
            check(d, w, count, poi)
        except RecursionError:
            break
    
    print(count)
    
[/code]

例えばcountが0のまま変動しません、なぜでしょう？  
解決策が全くわかりません。独学なので汚いコードかもしれませんすいません。  
よろしくお願いします。


CC BY-SA 4.0
2019-07-18T10:22:28.363
56727
2019-07-19T04:21:24.403
2019-07-19T04:21:24.403
32176
32176
question
python python3
Pythonのtry,exceptで変数が更新されない


try, except は無関係で、`count = 0`および`print(count)`の`count`と、`def check(d, w,
count, poi):`の中の`count += 1`の`count`が別の物を指しているからです。

`count += 1`の結果は1つの`def check(d, w, count,
poi):`の呼び出し中だけで有効であり、その外側の`count`や次の呼び出しの`count`には影響を与えません。

同じ`count`を使うためには、`def check(d, w, count,
poi):`からパラメータとしての`count,`は削除して、その処理の先頭で`if d > w:`の前に、`global count`を挿入しましょう。

以下の様になるでしょう。

[code]

    inin = input().rstrip().split(' ')
    sakana, poi, Durability = int(inin[0]), int(inin[1]), int(inin[2])
    
    d = Durability
    count = 0
    
    def check(d, w, poi):   # パラメータ削除
        global count        # global変数を使う
    
        if d > w:
            count += 1
            d = d - w
        else:
            poi -= 1
            if poi > 0:
                d = Durability
            check(d, w, poi)    # パラメータ削除
    
    for _ in range(sakana):
        w = int(input())
    
        try:
            check(d, w, poi)    # パラメータ削除
        except RecursionError:
            break
    
    print(count)
    
[/code]

その他の変数についても、もし必要があれば、対処を考えてください。


CC BY-SA 4.0
2019-07-18T11:30:50.887
56729
2019-07-18T11:30:50.887
26370
56727
answer