我需要优化一个遍历数字的程序

I need to optimize a program that goes through numbers

我的目标是创建一个程序,从 1 到 100 取数字,如果一个数字可以被 3 整除,它给 Jack,如果被 5 除以 Pot,如果一个数字可以同时被 3 和5 它给 JackPot 下面的代码有效,但有人告诉我它可以优化,但我不知道如何

a = 0
    while a < 100:
        list = []
        a = a + 1
        if a % 3 == 0:
            list.append("Jack")
        if a % 5 == 0:
            list.append("Pot")
        elif a % 3 and a % 5 == 0:
            print("JackPot")
    
        if list != []:
            print(*list)
        else:
            print(a)

试试这个:

        for a in range(1, 101):
            print(f"{'Jack' if not a % 3 else ''}{'Pot' if not a % 5 else ''}{a if a % 3 and a % 5 else ''}")        

它使用 f-string 打印大括号内的 Python 表达式。

'Jack' if not a % 3 else '' 仅在 not a % 3 时打印 Jack,换句话说,如果 a % 3 为零。同样对于 'Pot' if not a % 5.

第三组大括号打印 a if a % 3 and a % 5 else '',换句话说,如果 a % 3a % 5 都不为零,则打印 a

输出为:

1
2
Jack
4
Pot
Jack
7
8
Jack
Pot
11
Jack
13
14
JackPot
16
17
Jack
19
Pot
Jack
22
23
Jack
Pot
26
Jack
28
29
JackPot
31
32
Jack
34
Pot
Jack
37
38
Jack
Pot
41
Jack
43
44
JackPot
46
47
Jack
49
Pot
Jack
52
53
Jack
Pot
56
Jack
58
59
JackPot
61
62
Jack
64
Pot
Jack
67
68
Jack
Pot
71
Jack
73
74
JackPot
76
77
Jack
79
Pot
Jack
82
83
Jack
Pot
86
Jack
88
89
JackPot
91
92
Jack
94
Pot
Jack
97
98
Jack
Pot

如果你想要更短的东西,这里有一个 one-liner,它做的事情本质上是一样的,但在列表理解中有 for-loop 迭代:

        [print(f"{'Jack' if not a % 3 else ''}{'Pot' if not a % 5 else ''}{a if a % 3 and a % 5 else ''}") for a in range(1,101)]

你的大错误是认为 elif 是有意义的。请注意,a % 3 and a % 5 == 0 表示 (a % 3 != 0) and (a % 5 == 0),这可能不是您想要的。在任何情况下你都无法到达这里,除非 (a % 5 == 0) 为 false,因此 elif 分支将永远不会被采用。 (您还打印 "Jack Pot" 而不是 "JackPot")。

我可以看到一些小的调整,它们可能会使代码速度稍微快一些。由于此代码的 运行 时间主要由 i/o 控制,因此这无关紧要。

记住代码优化规则:不要这样做。专家也有一个规矩:先别做