python:每次函数运行时,如何增加数值并存储在变量中

Python: how to increment number and store in variable every time function runs

(我是Python的初学者,正如你所知)

我要做的是:我要计算用户选择错误选项的次数,如果超过次数,他就会失败。

我的方法是将计数存储在一个函数内的变量中,并检查if/else语句是否超过了次数。

部分代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    choice = int(input(">"))

if choice == 1:
    print("This is the wrong hall.")
    increment()
elif choice == 2:
    print("This is the wrong hall.")
    increment()
elif choice == 3:
    hall_passage()
else:
    end("You failed")

COUNT = 0
def increment():
    global COUNT
    COUNT += 1

increment()

print(COUNT)

增量部分来自这个线程,使用全局范围读取不是一个好的实践。

我真正不理解的部分是如何将计数存储在变量中,并且每次函数运行时它都会记住最后一个值。

最好的方法是什么?


调整这个答案,您可以使用自己的__dict__函数。注意:如果您还没有遇到@语法,请搜索"python"、"decorator":

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import functools as ft

def show_me(f):
    @ft.wraps(f)
    def wrapper(*args, **kwds):
        return f(f, *args, **kwds)
    return wrapper

@show_me
def f(me, x):
    if x < 0:
        try:
            me.count += 1
        except AttributeError:
            me.count = 1
        print(me.count, 'failures')

f(0)
f(-1)
f(1)
f(-2)

输出:

1
2
1 failures
2 failures


你觉得这个解决方案怎么样?

如果您在这里放置while循环,您将强制用户输入正确的答案。

另外,我把它放在if/elif/else语句输入函数之间。

count-该变量正在计算错误的选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
choice = int(input(">"))
count =0
while choice !=3:
    if choice == 1:
        print("This is the wrong hall.")
        count += 1  
        choice = int(input(">")) # Also i place in the if/elif/else statements input function
    elif choice == 2:
        print("This is the wrong hall.")
        count +=1
        choice = int(input(">"))
    elif choice == 3:
        hall_passage()
    else:
        end("You failed")
        count += 1
        choice = int(input(">"))

print(count)


也许像这样…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Counter():
    def __init__(self):
        self.counter = 0

    def increment(self):
        self.counter += 1

    def reset(self):
        self.counter = 0

    def get_value(self):
        return self.counter


mc = Counter()

while mc.get_value() < 3:
    v = int(input('a number: '))
    if v == 1:
        print('You won!')
        mc.counter = 3
    else:
        print('Wrong guess, guess again...')
        if mc.counter == 2:
            print('Last guess...')
        mc.increment()