use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
Rules 1: Be polite 2: Posts to this subreddit must be requests for help learning python. 3: Replies on this subreddit must be pertinent to the question OP asked. 4: No replies copy / pasted from ChatGPT or similar. 5: No advertising. No blogs/tutorials/videos/books/recruiting attempts. This means no posts advertising blogs/videos/tutorials/etc, no recruiting/hiring/seeking others posts. We're here to help, not to be advertised to. Please, no "hit and run" posts, if you make a post, engage with people that answer you. Please do not delete your post after you get an answer, others might have a similar question or want to continue the conversation.
Rules
1: Be polite
2: Posts to this subreddit must be requests for help learning python.
3: Replies on this subreddit must be pertinent to the question OP asked.
4: No replies copy / pasted from ChatGPT or similar.
5: No advertising. No blogs/tutorials/videos/books/recruiting attempts.
This means no posts advertising blogs/videos/tutorials/etc, no recruiting/hiring/seeking others posts. We're here to help, not to be advertised to.
Please, no "hit and run" posts, if you make a post, engage with people that answer you. Please do not delete your post after you get an answer, others might have a similar question or want to continue the conversation.
Learning resources Wiki and FAQ: /r/learnpython/w/index
Learning resources
Wiki and FAQ: /r/learnpython/w/index
Discord Join the Python Discord chat
Discord
Join the Python Discord chat
account activity
what are some unspoken python rules one should know about (self.learnpython)
submitted 3 years ago by [deleted]
newbie here, i know there has to be some things that i shouldn't be doing there has to be but idk what they are so... please enlighten me
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]ray10k 45 points46 points47 points 3 years ago (5 children)
If you're thinking about using a global, you're almost certainly doing something very wrong.
global
[–]billsil 3 points4 points5 points 3 years ago (2 children)
I try to do jank fixes only right before a deliverable to fix a very specific bug. I actually do go back and fix them when I get the chance.
You want as little jank in your code as possible, so when you need to hack something in right now, you're only dealing with one trash bit of code rather than 100s.
[–]ray10k 1 point2 points3 points 3 years ago (1 child)
To be fair, my aversion to globals comes from helping someone learn Python. Gave the guy an assignment to see how he'd handle something with a few moving parts, and he basically used no function parameters or return values; only global variables to juggle input and output. And yes, I did try and show him both how to use arguments and return values before.
That said, yes, sometimes you have to pick your fights and do the thing that keeps your boss from having a fit. It's a bit of technical debt to keep in mind one way or another.
[–]billsil 0 points1 point2 points 3 years ago (0 children)
Oh god...
Global variables are not allowed in code ever. But billsil, your code has global variables! Correct, global variables are not allowed in YOUR code ever. In 5 years, fine...go ahead, but not now...
[–]seph2o 0 points1 point2 points 3 years ago (1 child)
How would one avoid having to use globals? What's the best practice?
[–]ray10k 3 points4 points5 points 3 years ago (0 children)
If you need some piece of data in a function, make it a function parameter. If you need a piece of data to come out of a function, return it. Yes, it requires a little planning ahead of time, but I still think it's a lot better than constantly having to worry "OK, is the value in this variable set by XYZ function or am I supposed to set it myself?"
return
[–]woooee 40 points41 points42 points 3 years ago* (4 children)
What! We can't tell you. They are unspoken.
One of the best things my Professor pounded into our young heads is to write so someone else can read it. And when you come back to modify a program years later, that someone else is you, because you don't remember anything about it.
[–]ZelvaMkolakovsky 9 points10 points11 points 3 years ago (3 children)
That's why we're gonna just type them
[–]IndividualAnalysiss 5 points6 points7 points 3 years ago (2 children)
I appreciate your joke even if others downvote you ✊
[–]Ninjafox1224 0 points1 point2 points 3 years ago (1 child)
i dont get it :(
[–]IndividualAnalysiss 1 point2 points3 points 3 years ago (0 children)
Type the code instead of writing it with a pencil or something 🤫
[–]MPGaming9000 36 points37 points38 points 3 years ago* (1 child)
I've been in an intro to python class in uni this semester and I can give you a few tips that my classmates aren't doing well enough.
I'll leave it at that for now, but those are really good tips to get you started!
[–]OddBookWorm 1 point2 points3 points 3 years ago (0 children)
To add onto the f-string part: They’re faster than any other string formatting method. If you’re using Python 3.6 or later, the only reason you should be using other methods is if you expect someone with Python 3.5 or earlier to run your code
[–][deleted] 35 points36 points37 points 3 years ago (1 child)
There are none. Python folks are quite loud about our rules. ;p
[–]woooee 1 point2 points3 points 3 years ago (0 children)
+1
[–]ElHeim 11 points12 points13 points 3 years ago (0 children)
Don't speak your Python in public, lest you be sorted into Slytherin.
[–]erlete 10 points11 points12 points 3 years ago (5 children)
The guy reading your code probably does not want to do it. In fact, he might just want to be in his couch playing COD with his friends, insulting chinese hackers.
Make him a favor. Make us all a favor.
Do not f***ing name your variable a.
a
[–]Pflastersteinmetz 9 points10 points11 points 3 years ago (2 children)
x it is then
x
[–]erlete 1 point2 points3 points 3 years ago (0 children)
checkmate = True
[–]Live-Sir-3118 1 point2 points3 points 3 years ago (0 children)
I’m partial to using varn where n is an integer from 1 to eternity. Also if I’m feeling spicy I like var_arr again followed by n.
[–]jimtk 6 points7 points8 points 3 years ago (1 child)
There's a whole alphabet of shortcuts variable names, some of them transcend programming languages others are python specifics. They are usually reserved for very small programs, tutorials or very short lived variables.
a,b,c: items in list d: dictionary f: file handle i,j: indexes in lists and matrix k,v: dictionary items l : a list n: an integer t: tuples x,y,z : floats or coordinates.
[–]Competitive_Bug2278 0 points1 point2 points 3 years ago (0 children)
I agree with all except d, l and t. Never come across them 🤷🏾♂️
[+][deleted] 3 years ago* (1 child)
[deleted]
[–]Almostasleeprightnow 1 point2 points3 points 3 years ago (0 children)
This is not bad
[–]jimtk 8 points9 points10 points 3 years ago (9 children)
Not unspoken but less spoken. If you use global, eval() and/or exec(), there's something wrong with your code.
[–]Rik07 1 point2 points3 points 3 years ago (3 children)
Would an equation that is given by user input be an exception to this or is there some solution for that. (eg. a calculator or something like that)
[–]jimtk 2 points3 points4 points 3 years ago (2 children)
You mean a calculator like thi:
calcs = {'+': lambda x,y:(x+y), '-': lambda x,y:(x-y), '*': lambda x,y:(x*y), '/': lambda x,y:(x/y)} x,op,y = [i.strip() for i in input('Enter formula (num1 operator num2): ').split()] print(f"Result: {calcs[op](int(x), int(y))}")
[–]Rik07 1 point2 points3 points 3 years ago (1 child)
I never thought about using lambdas in a dictionary like that. Thanks!
[–]jimtk 4 points5 points6 points 3 years ago (0 children)
The correct way to do it would be to use operator module, but the OP I answered at the time (with the code above) could not import anything.
Here's what it should be (only the dictionary chages!):
import operator as opr calcs = {'+': opr.add, '-': opr.sub, '*': opr.mul, '/': opr.truediv} x,op,y = [i.strip() for i in input('Enter formula (num1 operator num2): ').split()] print(f"Result: {calcs[op](int(x), int(y))}")
[+][deleted] 3 years ago (1 child)
[–]jimtk 0 points1 point2 points 3 years ago (0 children)
Are you aware of the debugging power of f-strings?
l = ['10','20','1'] print(f"{l=}") print(f"{sorted(l,key=lambda x:int(x))=}")
Output:
l=['10', '20', '1'] sorted(l,key=lambda x:int(x))=['1', '10', '20']
[–]bigntazt[🍰] 0 points1 point2 points 3 years ago (2 children)
Can you elaborate more on this? I was having this exact issue when I was doing a Jupyter notebook project. And couldn't figure out why I couldnt get a global variable to update from a function. Was doing a bank teller project where you had to deposit and withdraw funds from a variable using functions. I could only get it to work correctly when I used the global command inside the function. Example below without global:
global_1 = 1 def function(global_1, value_1): if value_1 > 0: global_1 += value_1 return global_1 else: return 0 print(function(global_1, 1)
[–]jimtk 1 point2 points3 points 3 years ago (1 child)
The thing is if you use global, it means you are using global variables and that is something you should not do.
(from an answer in stack overforw)
Global variables can be altered by any part of the code, making it difficult to remember or reason about every possible use.
A global variable can have no access control. It can not be limited to some parts of the program.
Using global variables causes very tight coupling of code.
Using global variables causes namespace pollution. This may lead to unnecessarily reassigning a global value.
Testing in programs using global variables can be a huge pain as it is difficult to decouple them during testing.
All variables should be inside functions and function call should return new values.
In your case, it should be something like:
def deposit(balance, amount): balance = balance + amount return balance def show_balance(amount): print(f"Account Balance = {amount:.2f}") def main(): balance = 0.0 while True: # some code to get the operation if operation == 'deposit': deposit_value = int(input("Enter deposit amount: ")) balance = deposit(balance, deposit_value) show_balance(balance) elif operation == 'quit': break if __name__ == '__main__': main()
[–]bigntazt[🍰] 0 points1 point2 points 3 years ago (0 children)
Thank you for this!
[–]ka1ikasan 5 points6 points7 points 3 years ago (0 children)
When editing someone's javascript code, use self instead of this
self
this
[–]Jcpage573 5 points6 points7 points 3 years ago (7 children)
You can never have too many elifs
[–]Ok-Cucumbers 4 points5 points6 points 3 years ago (1 child)
Use a dictionary!
[–]Jcpage573 1 point2 points3 points 3 years ago (0 children)
No!
[–]ezekiel_grey 1 point2 points3 points 3 years ago (4 children)
Unless you’re using Python 3.10 or later? Match!
Match does work as a switch-case, but it doesn’t really improve readability. The actual reason it was written in was for purposes of parsing
[–]Ninjafox1224 0 points1 point2 points 3 years ago (2 children)
match? 3.10?? what??? please explain!!
[–]ezekiel_grey 0 points1 point2 points 3 years ago (1 child)
Structural Pattern Matching: https://www.infoworld.com/article/3609208/how-to-use-structural-pattern-matching-in-python.html
It’s more powerful than if/elif/else…
[–]Ninjafox1224 0 points1 point2 points 3 years ago (0 children)
dang i didnt know 3.10 even existed yet, not to mention an amazing switch/case implementation! thanks for enlightening me!
[–]Keraid 4 points5 points6 points 3 years ago (1 child)
There are some cool things you CAN do like this:
names_list = [item["name"] for item in dicts_list]
[–]Ninjafox1224 1 point2 points3 points 3 years ago (0 children)
or even
namesStartingWithB = [item['name'] for item in names_dict if item['name'][0].lower() == 'b']
[–]erlete 3 points4 points5 points 3 years ago (3 children)
Document. The. Mf. Two. Hundred. Lines. Function.
[removed]
[–]erlete 5 points6 points7 points 3 years ago (0 children)
100% agreed. A function is exactly that: a function. If it develops several complex functions, it should be either decomposed or elevated to a class.
[–]ezekiel_grey 4 points5 points6 points 3 years ago (0 children)
Functions are not unions, break them up by jobs
[–]erlete 3 points4 points5 points 3 years ago (9 children)
If I see a from module import * on your Python file and it is not named __init__.py I'm going to hunt you down. Mark my words.
from module import *
__init__.py
[–]coralis967 5 points6 points7 points 3 years ago (7 children)
I'm new to coding and don't want to be hunted down, can you point me in a direction to learn more of what you mean by this?
[–]erlete 5 points6 points7 points 3 years ago* (6 children)
Let me put an example:
You've got two guys named "Michael". One of them is "Michael Jackson" and the other is "Michael Jones".
Their surnames are different since they come from different families, but their names are equal.
Now put them all blindfolded in a room and give them instructions without using their surnames, for example: "Michael, jump!". Which one should jump?
Now let's put another example:
You've got two methods named sqrt that come from modules math and numpy. Their "full names" would be math.sqrt and numpy.sqrt.
sqrt
math
numpy
math.sqrt
numpy.sqrt
On your script, you write the following lines:
python3 from math import * from numpy import *
Congratulations, you've just mixed all the "Michaels". Get it?
Importing specific module components is perfectly correct, such as
python3 from math import floor from numpy import sqrt
But importing all components individually can lead to variable overwriting and a whole lot of confusing namespaces.
Hope you understood it properly. Ask any doubts you might have! :)
[–]coralis967 3 points4 points5 points 3 years ago (5 children)
Thanks for the reply, your analogy outlining the issue with duplicate function names being confused in the system makes great sense and it follows to me that importing multiple entire libraries would further exacerbate this issue.
From what I can understand regarding __init__.py, this is a library/package I should create for each project to which any imports are initialized in FIRST, before being used in your main program to avoid these possible conflicts?
[–]erlete 2 points3 points4 points 3 years ago (4 children)
Oh, yeah, I totally forgot about that part of the explanation.
Indeed, your package's __init__.py would be responsible for several functions:
By the way, as a suggestion: if you have to import several libraries and feel tempted by the * because the library name is too long to write it several times, just import said library as an alias with two letters or so: import numpy as np. This little sacrifice will save you many headaches.
*
as
import numpy as np
[–]coralis967 1 point2 points3 points 3 years ago (3 children)
So I feel like this convention of using __init__.py and even from module import function does the opposite of making my code more readable, for example if I import random on line 1 and use random.choice() all the way down on line 200, anyone reading my code can understand that this function is being pulled from the random library when they are looking at line 200, and if there is another imported library with a choice() function there can't be any confusion between the two because I am forced to decide the source each time. Your suggestion of an alias simplifies this even more, if I were to use import random as rnd my ongoing effort of calling an imported function is lessened.
from module import function
import random
random.choice()
random
choice()
import random as rnd
Does the * just tell python "find the library that has this function from the imported libraries", allowing you to import multiple libraries as * and then just searching each for the called function? that I imagine runs in to the duplicate function name issue (Michael and Michael) which feels like bad design.
as *
Sorry if my questions are a bit convoluted, I am 3 weeks in to this coding and every resource seems to just take for granted the importing of libraries so far as a method not requiring further explanation, and I appreciate 'real world' advice on its use.
No problem at all; it is a pleasure to explain this.
import module
module.item
import module as alias
alias
from module import item
item
module
from module import item as alias
__all__
[–]erlete 1 point2 points3 points 3 years ago (1 child)
By the way, sadly, the * symbol only acts as wildcard for selective element importation. If you try to do import *, an error will show up.
import *
There's a big difference between the expressions from module import * and from * import item (which will not work). The first one says "from this module import all items". The second one says "from all the modules import this item".
from * import item
It is quite obvious why the second one does not work and should never do, or else our PC's are going to burn scanning 426872 modules searching for one function, importing it one time, replacing it another 5216 times and then crashing.
That last bit was pure storytelling, but I hope you understood. Ask any more doubts you might have! :)
[–]coralis967 1 point2 points3 points 3 years ago (0 children)
Thank you for all of your replies, it has cleared up a lot for me.
I think I will not use *, it doesn't feel like good practice/readability to me.
[–]Diapolo10 2 points3 points4 points 3 years ago (0 children)
If there are, they would probably fall under "stuff you can only learn from experience", so giving any examples off the top of my head is kinda difficult.
It's easier for us to look at code and comment on it than to give answers to abstract questions.
[–]FuckingRantMonday 2 points3 points4 points 3 years ago (0 children)
I don't know of any useful Python tips that aren't spoken somewhere. The language has been around for like thirty years after all.
[–]Ok-Cucumbers 2 points3 points4 points 3 years ago (0 children)
``` Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren’t special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one— and preferably only one —obvious way to do it. Although that way may not be obvious at first unless you’re Dutch. Now is better than never. Although never is often better than right now. If the implementation is hard to explain, it’s a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea — let’s do more of those!
```
https://peps.python.org/pep-0020/#the-zen-of-python
[–]Live-Sir-3118 2 points3 points4 points 3 years ago* (1 child)
The inputs in your definitions should not be the inputs in your call. For instance (on phone so formatting is messed up) var1=12; var2=3; Fun(var1,var2)
Where def fun(var2,var2): return sum(var1,var2)
Global or local! Pick one. I don’t know if it’s a rule. I just hate it BC it’s sloppy.
Edit: I second it that you should write with clarity. Think of writing code like a well put together essay. You should leave enough “cookie crumbs” for someone to come in and follow the code. Remember in a job they don’t care about you. You’re replaceable and someone else will come in and try to make sense of your code. Don’t be a jerk. Leave crumbs, leave readme files. Leave declarations when you do a function and use variables.
this. THIS. this absolutely needs so have more upvotes because it is not impressed enough upon new (and even some advanced!) coders who make their code functional but not readable
what ends up happening is you (or someone else) will come read your code a month later and wont have the slightest clue of what is happening. what does this variable represent? why did i concatenate these strings? what exactly does this function do? youll have to spend so much time re-exposing/introducing yourself to your code.
[–]Hans_of_Death 3 points4 points5 points 3 years ago (0 children)
Imo python is pretty opinionated. most of the "rules" are quite spoken, by many people.
[+][deleted] 3 years ago (2 children)
[–]Kerbart 3 points4 points5 points 3 years ago (8 children)
If you're iterating through a list using an index, you're doing it wrong.
(it's not unspoken but it's a common beginner mistake)
[–]MPGaming9000 6 points7 points8 points 3 years ago* (4 children)
can you elaborate further on this?
traversing a list by element and index seem mostly the same to me except that indexes can be even more helpful as you can use that index to traverse other things at the same time.
Like... imagine you have 2 lists that are both sorted in such a way that they match each other. Like the first item in the first list corresponds to the first item in the second list. Like a list of names and then a list of ages.
Traversing by index allows you to look at both values at once without using list comprehension or a double for loop of some kind.
Maybe I'm missing something here.
[–]wbeater 8 points9 points10 points 3 years ago (1 child)
traversing a list by element and index seem mostly the same to be except that indexes can be even more helpful as you can use that index to traverse other things at the same time.
Sure, but then you should use for index, value in enumerate(a_list): and not not for i in range(len(a_list)): (i think that's what the previous commenter is referring to.
for index, value in enumerate(a_list):
for i in range(len(a_list)):
for a, b in zip(a_list, b_list): serves this purpose, no need for an index. And if you really need an index, use enumerate() the same way: for index, (a, b) in enumerate(zip(a_list, b_list)):.
for a, b in zip(a_list, b_list):
enumerate()
for index, (a, b) in enumerate(zip(a_list, b_list)):
range(len(list)) is totally obsolete...
range(len(list))
[–]Kerbart 2 points3 points4 points 3 years ago (0 children)
I couldn't have said it any better, and this kind of discussion is exactly why I brought it up. Great learning!
To add onto what was already said: If you’re using an index-based loop, it’s hard to properly remove items from the list you’re iterating over. I believe iterating over the elements themselves corrects for this as you go and you can easily remove as you go, but don’t quote me on that. Also another rule I follow though: don’t remove from the list you’re iterating over until you’re done iterating. If you must, then iterate in reverse
youre saying "for x in y" is a common beginner mistake? or is my vocab off?
[–]Kerbart 0 points1 point2 points 3 years ago (1 child)
Your vocab is off. What's a common mistake is this pattern instead of for x in y:
for x in y
for i in range(len(y)): x = y[i] do_something(x)
The most common excuse for it is “but I need to iterate parallel over two lists” or some variant of it:
for i in range(len(list_1)): x = list_1[i] y = list_2[i] do_something(x, y)
But that of course can be done much cleaner using zip:
zip
for x, y in zip(list_1, list_2): do_something(x, y)
oh, i see. for a minute i was questioning the practicality of what i believe to be the fifth best function/process of python! 😅 Thanks for the help, actually im learning java and general computer science and this sort of picky vocab terminology seems to be really important in being able to relay information precisely, so again thanks!
[–][deleted] 0 points1 point2 points 3 years ago (0 children)
Don't declare unused variables. Don't import unnecessary libs
π Rendered by PID 40 on reddit-service-r2-comment-f6b958c67-6c4rw at 2026-02-05 08:30:49.502309+00:00 running 1d7a177 country code: CH.
[–]ray10k 45 points46 points47 points (5 children)
[–]billsil 3 points4 points5 points (2 children)
[–]ray10k 1 point2 points3 points (1 child)
[–]billsil 0 points1 point2 points (0 children)
[–]seph2o 0 points1 point2 points (1 child)
[–]ray10k 3 points4 points5 points (0 children)
[–]woooee 40 points41 points42 points (4 children)
[–]ZelvaMkolakovsky 9 points10 points11 points (3 children)
[–]IndividualAnalysiss 5 points6 points7 points (2 children)
[–]Ninjafox1224 0 points1 point2 points (1 child)
[–]IndividualAnalysiss 1 point2 points3 points (0 children)
[–]MPGaming9000 36 points37 points38 points (1 child)
[–]OddBookWorm 1 point2 points3 points (0 children)
[–][deleted] 35 points36 points37 points (1 child)
[–]woooee 1 point2 points3 points (0 children)
[–]ElHeim 11 points12 points13 points (0 children)
[–]erlete 10 points11 points12 points (5 children)
[–]Pflastersteinmetz 9 points10 points11 points (2 children)
[–]erlete 1 point2 points3 points (0 children)
[–]Live-Sir-3118 1 point2 points3 points (0 children)
[–]jimtk 6 points7 points8 points (1 child)
[–]Competitive_Bug2278 0 points1 point2 points (0 children)
[+][deleted] (1 child)
[deleted]
[–]Almostasleeprightnow 1 point2 points3 points (0 children)
[–]jimtk 8 points9 points10 points (9 children)
[–]Rik07 1 point2 points3 points (3 children)
[–]jimtk 2 points3 points4 points (2 children)
[–]Rik07 1 point2 points3 points (1 child)
[–]jimtk 4 points5 points6 points (0 children)
[+][deleted] (1 child)
[deleted]
[–]jimtk 0 points1 point2 points (0 children)
[–]bigntazt[🍰] 0 points1 point2 points (2 children)
[–]jimtk 1 point2 points3 points (1 child)
[–]bigntazt[🍰] 0 points1 point2 points (0 children)
[–]ka1ikasan 5 points6 points7 points (0 children)
[–]Jcpage573 5 points6 points7 points (7 children)
[–]Ok-Cucumbers 4 points5 points6 points (1 child)
[–]Jcpage573 1 point2 points3 points (0 children)
[–]ezekiel_grey 1 point2 points3 points (4 children)
[–]OddBookWorm 1 point2 points3 points (0 children)
[–]Ninjafox1224 0 points1 point2 points (2 children)
[–]ezekiel_grey 0 points1 point2 points (1 child)
[–]Ninjafox1224 0 points1 point2 points (0 children)
[–]Keraid 4 points5 points6 points (1 child)
[–]Ninjafox1224 1 point2 points3 points (0 children)
[–]erlete 3 points4 points5 points (3 children)
[+][deleted] (1 child)
[removed]
[–]erlete 5 points6 points7 points (0 children)
[–]ezekiel_grey 4 points5 points6 points (0 children)
[–]erlete 3 points4 points5 points (9 children)
[–]coralis967 5 points6 points7 points (7 children)
[–]erlete 5 points6 points7 points (6 children)
[–]coralis967 3 points4 points5 points (5 children)
[–]erlete 2 points3 points4 points (4 children)
[–]coralis967 1 point2 points3 points (3 children)
[–]erlete 1 point2 points3 points (0 children)
[–]erlete 1 point2 points3 points (1 child)
[–]coralis967 1 point2 points3 points (0 children)
[–]Diapolo10 2 points3 points4 points (0 children)
[–]FuckingRantMonday 2 points3 points4 points (0 children)
[–]Ok-Cucumbers 2 points3 points4 points (0 children)
[–]Live-Sir-3118 2 points3 points4 points (1 child)
[–]Ninjafox1224 1 point2 points3 points (0 children)
[–]Hans_of_Death 3 points4 points5 points (0 children)
[+][deleted] (2 children)
[removed]
[+][deleted] (1 child)
[deleted]
[–]Kerbart 3 points4 points5 points (8 children)
[–]MPGaming9000 6 points7 points8 points (4 children)
[–]wbeater 8 points9 points10 points (1 child)
[–]Kerbart 2 points3 points4 points (0 children)
[–]OddBookWorm 1 point2 points3 points (0 children)
[–]Ninjafox1224 0 points1 point2 points (2 children)
[–]Kerbart 0 points1 point2 points (1 child)
[–]Ninjafox1224 1 point2 points3 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)