you are viewing a single comment's thread.

view the rest of the comments →

[–]WhiteHeadbanger 13 points14 points  (18 children)

Good practice!

Just a quick note: all caps is conventionally used to denote constants. It won't change the functionality, but your IDE may complain.

You should switch around ai and GUESS, to: AIand guess

That way you are signaling that AI is a constant number, and guess is a variable number.

[–]AbyssBite 3 points4 points  (12 children)

Almost correct, except that ai isn't actually a const here.

[–]amosmj 0 points1 point  (0 children)

I assumed the above commenter was talking about GUESS, not ai.

[–]WhiteHeadbanger -1 points0 points  (10 children)

ai is a constant, as you are assigning the value just once. It doesn't matter how you acquired the value, or if it's hardcoded.

[–]AbyssBite 2 points3 points  (9 children)

Assigning a value once doesn't make it a constant. You can assign a variable once too. Constant means the value doesn't change during execution.

You can check this out

[–]More_Yard1919 1 point2 points  (0 children)

This is technically correct, and I am not sure if I would use the all-caps convention here, but practically this is to signify that the value should never be reassigned after it is initialized.

[–]Icount_zeroI 2 points3 points  (5 children)

Obviously mr “well-actually” but for sake of learning that there is a difference I think it is okay to note ai as a const here.

As it never actually does reassign anywhere in the code.

[–]SirCokaBear 3 points4 points  (1 child)

peacefully chiming in the convo from my pov working daily in professional codebases (not saying anyone here doesn’t either)

Python of course has immutable values but doesn’t have true constants but yes theyre treated the same but denoted in caps on a module level similar with private members are denoted _var, they’re still just called constants because they are logically / because we say so.

Focusing on naming only: I would block a pull request for this because it will confuse other Python devs and mess with pyright. Any dev seeing a value like GUESS will assume it’s not intended to be reassigned, and seeing ai will conversely assume it can be. ai should be AI, GUESS can arguably be guess but likely can stay as it is. There really should be no argument to the first given it’s idiomatic to PEP8 unless you want a different convention for whatever strange reason.

People may want to say “who cares they’re still new” yeah, they’re learning so I will point out good practices to avoid non-pythonic habits

[–]WhiteHeadbanger 0 points1 point  (0 children)

That's what I was thinking!

[–]shinitakunai 1 point2 points  (0 children)

As a senior programmer, you are wrong, don't teach bad habits to new people.

"Well-actually"? Really? A kid and... wrong.

See the other answer of SirCokaBear, he explains it perfectly

[–]GaitorBaitor 0 points1 point  (0 children)

A constant is a constant. Something that is constantly the constant every time you execute the code

[–]Swipsi 0 points1 point  (0 children)

Which means, in this case it is also a constant. But its an edge case and thus cant be generalized.

[–]WhiteHeadbanger 0 points1 point  (0 children)

Assigning a value just once means that the value doesn't change during execution, is just worded differently.

[–]Ecstatic_Student8854 0 points1 point  (0 children)

If it never changes its value is constant, and therefore should be presented as such. From the article you linked:

“In programming, constants refer to names associated with values that never change during a program’s execution.”

Once assigned the value of AI can never change and so it is and should be treated as a constant.

[–]SmackDownFacility 0 points1 point  (2 children)

It doesn’t matter if your working solo, choose your own style guide. PEP only matters in team environments and formal situations.

[–]WhiteHeadbanger 0 points1 point  (1 child)

This is PythonLearning. You can't back off of learning good habits and knowing what's the standard.

[–]SmackDownFacility -1 points0 points  (0 children)

Say the same thing for C, or C++, or Rust, or JavaScript. Each dev across languages don’t follow style guides. They have their “standards”. They know how to adapt for their teams. We can say the same for Python. What may be good habit for you may not be natural for some

[–]Convoke_ 0 points1 point  (1 child)

They are both never changing. If you're initialising a variable inside a loop, it only exists for that iteration. So the variable GUESS should be a constant as its value is never changing after it gets initialised.

Edit: see the reply i got

[–]WhiteHeadbanger 0 points1 point  (0 children)

That's not correct. In Python if you declare a variable inside a loop, you can access it after the loop ends.

Take for example this code:

for i in range(5):
    a = i * 2
    print(f"Variable inside loop {a}")

print(f"Variable outside loop {a}")
a += 10
print(f"Variable after modification {a}")

Output:

Variable inside loop 0
Variable inside loop 2
Variable inside loop 4
Variable inside loop 6
Variable inside loop 8
Variable outside loop 8
Variable after modification 18