Python Forum
Problem with variables - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Problem with variables (/thread-22455.html)



Problem with variables - JCB - Nov-13-2019

So yeah, I'm trying to make a simple randomized generator in Python for my own-design board game but I found a problem. To be more specific, I want to generate a list of items that the player will gain by a specific rule (i don't want to go deeper into the rules Dodgy ). Now the problem is, that sometimes (depending on what generates), Python screams at my face that:
Error:
Traceback (most recent call last): File "main.py", line 358, in <module> print(count, end=' ') NameError: name 'count' is not defined
Now, when you'll browse the code i'm putting below, you'll notice that the variable 'count' IS defined. It's probably a "missclick" of mine or sth like that but I have no idea where and how does it look. Can you help me?

Code:



RE: Problem with variables - ichabod801 - Nov-13-2019

650 lines of code with no functions, just a huge string of if/elif/else? No wonder you're having trouble finding the bugs. Please, learn functions, learn how to use data for conditional processing.

As to your error, count is not necessarily defined. If x is 91 or less, you go to an if/elif with no else. If neither of those conditions are true, count won't be defined.


RE: Problem with variables - JCB - Nov-13-2019

Thanks, I get it now.

BTW I tried functions and it looks like I need more time. Welp, at least this is fixed Tongue


RE: Problem with variables - the_ophidian_order - Nov-13-2019

First, I echo ichabod801's comments.

Second, here's my crack at debugging your code: I found that if I use a stone hoe without silk touch, and a fortune enhancement of 21711917, that puts me in the apparently offending section of the code. If we look at the last five lines (358 through 362), we have this:

            else:
                count = 1
                item = "cornflower"
            print(count, end=' ')
            print(item)
            r = r - 1
"count" is defined, but only under the "else" that's started on line 357. The two "print" commands are not on the same indentation, so they're actually in the "while" loop that starts on line 274 -- they'll get executed every time in that while loop regardless of any of the checks (and subsequent settings of "count") between line 276 and 359. This is what makes it possible to get to line 360 without defining "count". I suspect what you want is this:

            else:
                count = 1
                item = "cornflower"
                print(count, end=' ')
                print(item)
                r = r - 1
... which puts those print statements under the "else" where they (apparently) belong. This seems to avoid generating the "count not defined" error under the same conditions (The stone hoe without silk touch, and a fortune enhancement of 21711917). However, I can't say that's a definitive test of all of the possibilities.

I'm assuming you're not done with the program yet, because when I go out with a bucket I always get nothing.