My first Python program, tips and constructive critisism wanted

  • (2 Pages)
  • +
  • 1
  • 2

15 Replies - 2623 Views - Last Post: 02 December 2015 - 02:04 PM Rate Topic: -----

#1 Zoap   User is offline

  • New D.I.C Head

Reputation: 1
  • View blog
  • Posts: 7
  • Joined: 30-November 15

My first Python program, tips and constructive critisism wanted

Posted 30 November 2015 - 05:17 PM

As the title says this is the first thing I have made in python that I have done on my own from an "original" idea without some tutorila explaining how it's all done right.

I am fairly new to programming in general and I am currently reading introduction to C# on university level and early next year i'll be reading Python and Pearl, so I thought it might be a good idea to start early with atleast one of the languages.

So this is my Program, tell me what you think of it.

What should I think about in the future? what is done wrong? what is done right?

Something that I find very interesting is to try and make my code as foolproof as possible from the user-end, so feel free to crash
it and come back to me with what I should think about when it comes to the end-user side of code.
__author__ = 'Zoap'

def Search():

    inv = "\nInvalid input"
    invx = "\nNumber to search for must be a number!"
    invs = "\nLength must be a number!"

    print("\nThis program allows you to search for the number of possible combinations of a pin number of length x, "
          "given that you know one of the digits")

    x = str(input("\nInput number to search for: "))

    if x.isdigit() is False:
        print(invx)
        Search()
        return

    elif x.isdigit() is True:
        def PinLength():

            s = str(input("\nInput length of pin code: "))

            if s.isdigit() is False:
                print(invs)
                PinLength()
                return

            elif int(s) > 7:
                print("\nLength can not be more than 7 digits!")
                PinLength()
                return

            import math

            stop = int((math.pow(10, int(s))))

            if stop < int(x):
                print("\nLength of pin makes the number to search for bigger than the possible number of variations!")
                Search()
                return

            elif s.isdigit() is True:
                def CalcForLoop():
                    number_list = []

                    # For every integer in range add int to list and convert to string
                    for i in range(0, (stop + 1)):
                        number_list.append(str(i))

                    # For every str in list containing x, count x
                    x_numbers = [a for a in number_list if x in a]

                    # Percent of total numbers in range containing digit x
                    percent = len(x_numbers) / (stop / 100)

                    if int(x) >= 10:
                        print("\nThere are a total of " + str(len(x_numbers)) +
                              " numbers between 0 and " + str(stop) + " containing the number " + x)
                        print("\nThat is a total of " + str("%.2f" % percent) + "%" " of all numbers between 0 and " +
                              str(stop))

                    elif int(len(x_numbers)) is 1:
                        print("\nThere are a total of " + str(len(x_numbers)) +
                              " number between 0 and " + str(stop) + " containing the digit " + x)
                        print("\nThat is a total of " + str("%.2f" % percent) + "%" " of all numbers between 0 and " +
                              str(stop))

                    else:
                        print("\nThere are a total of " + str(len(x_numbers)) +
                              " numbers between 0 and " + str(stop) + " containing the digit " + x)
                        print("\nThat is a total of " + str("%.2f" % percent) + "%" " of all numbers between 0 and " +
                              str(stop))

                    def RunAgain():

                        yes = "y" or "Y"
                        no = "n" or "N"

                        choice = input("\nRun again? y/n: ")

                        if choice is yes:
                            Search()
                            return

                        elif choice is no:
                            exit()

                        else:
                            print(inv)
                            RunAgain()
                            return

                    RunAgain()

                CalcForLoop()

        PinLength()

Search()

This post has been edited by jon.kiparsky: 30 November 2015 - 07:21 PM
Reason for edit:: added code to post for convenience of the reader


Is This A Good Question/Topic? 0
  • +

Replies To: My first Python program, tips and constructive critisism wanted

#2 jon.kiparsky   User is offline

  • Beginner
  • member icon


Reputation: 11690
  • View blog
  • Posts: 19,870
  • Joined: 19-March 11

Re: My first Python program, tips and constructive critisism wanted

Posted 30 November 2015 - 07:50 PM

You might want to say a few words about what you intend this program to do. That'll make it easier for people to determine whether you've done that.

A few style notes:
1) python programmers typically prefer snake_case (all-lowercase, with underscore separators) for variable and function names and CamelCase for class names. These preferences are not enforced by the language, but they are important because they help the person reading your code to orient themselves correctly.
2) if foo is True should usually be written as if foo. The longer form is only to be used when you want to specifically check that the value of foo is True as opposed to some other truthy value like 17.
3) This is sort of weird:

Quote

elif x.isdigit() is True:
def PinLength():


Typically, you'll have your function definitions in the top level or in a class definition, and then you'd use them in a place. Here, you're actually doing the definition if x is a digit - this almost certainly not what you're wanting.
4) Your use of recursion in PinLength is interesting, but typically in python you'd use a loop for this.
5) In general, imports are done at the top of a file. That way it's easier to keep track of what you're using.
6) The common pattern of printing a line starting with a newline suggests that you might want to define a function for this. This function would take a string, and print it with a leading newline character appended. Is this too simple a thing to make into a function? Not at all! Anything that you do more than once should be a function. In this case using this function would allow you to change your output style later, for example to use a leading tab instead of a leading newline, and to make this change in exactly one place. Or you might get fancier and allow the user to redirect output to a file, or you might want to send output to a GUI - all of these changes could be made by changing the one output function.

That should do for a start - I haven't checked your program for errors or even run it, since you've got plenty of stuff to work on here.
Was This Post Helpful? 1
  • +
  • -

#3 ndc85430   User is online

  • I think you'll find it's "Dr"
  • member icon

Reputation: 981
  • View blog
  • Posts: 3,871
  • Joined: 13-June 14

Re: My first Python program, tips and constructive critisism wanted

Posted 30 November 2015 - 08:03 PM

Similarly to point 2 in Jon's post, if foo is False can be written if not foo.
Was This Post Helpful? 1
  • +
  • -

#4 DK3250   User is offline

  • Pythonian
  • member icon

Reputation: 561
  • View blog
  • Posts: 1,794
  • Joined: 27-December 13

Re: My first Python program, tips and constructive critisism wanted

Posted 01 December 2015 - 04:29 AM

In your RunAgain() function, line 75-92, it is preferred to do like this:
if choice in ["y", "Y"]:
.. and similar in line 86.
Another way would be to change line 80 to
choice = input("\nRun again? y/n: ").upper()

.. and then only check for capitalized input.
Both way will omit the two variables declared in line 77, 78.
By the way, the function name is in CamelCase, - should be snake_case like: run_again()
Was This Post Helpful? 0
  • +
  • -

#5 DK3250   User is offline

  • Pythonian
  • member icon

Reputation: 561
  • View blog
  • Posts: 1,794
  • Joined: 27-December 13

Re: My first Python program, tips and constructive critisism wanted

Posted 01 December 2015 - 04:50 AM

I don't entirely agree with ndc85430 in:
"Similarly to point 2 in Jon's post, if foo is False can be written if not foo. "

if foo is False:
will only execute if foo is a boolean variable with the value False.

if not foo:
.. however, will execute if foo is False (Boolean), 0 (Integer zero), or None

I know this may be quite academic, but just to clarify the subtle difference...

This post has been edited by DK3250: 01 December 2015 - 04:51 AM

Was This Post Helpful? 1
  • +
  • -

#6 baavgai   User is offline

  • Dreaming Coder
  • member icon


Reputation: 7502
  • View blog
  • Posts: 15,546
  • Joined: 16-October 07

Re: My first Python program, tips and constructive critisism wanted

Posted 01 December 2015 - 07:11 AM

At first I was going to comment on your excessive returns. Then I saw why they were there:
def Search():
#...
    if x.isdigit() is False:
        print(invx)
        Search()
        return



Recursion for looping is bad. Also, anytime you have to pull out an exit() in the middle of your program, you know you're doing something wrong.

While a def inside another def is fine in python, I'm dubious of its use in an if then block. I'd pull them all out to the top level and see how far you get.


Note, yes = "y" or "Y" doesn't do what you think it does.

Perhaps something like:
import math

def ask_int(prompt):
    # your code here

def ask_pin_len():
    # your code here

def search(num_to_search_for, stop):
    # your code here

def show_results(num_to_search_for, stop, x_numbers, pct):
    # your code here

def ask_search():
    print("This program allows you to search for the number of possible combinations of a pin number of length x, "
          "given that you know one of the digits")

    num_to_search_for = ask_int("Input number to search for: ")
    pin_len, stop = ask_pin_len()
    x_numbers, pct = search(num_to_search_for, stop)
    show_results(num_to_search_for, stop, x_numbers, pct)

def ask_run_again():
    # your code here

def main():
    running = True
    while running:
        ask_search()
        running = ask_run_again()

main()


This post has been edited by baavgai: 01 December 2015 - 07:12 AM

Was This Post Helpful? 1
  • +
  • -

#7 Zoap   User is offline

  • New D.I.C Head

Reputation: 1
  • View blog
  • Posts: 7
  • Joined: 30-November 15

Re: My first Python program, tips and constructive critisism wanted

Posted 01 December 2015 - 04:19 PM

I have gone over my code given the things you suggested/pointed-out and I have made some changes, since I have not looked at any tutorials regarding python or researched the diffrent commands that I have been using, alot of them have been applied improperly, now I have a better understanding of what to use where and how (atleast I think I do, tho i'm sure that someone will tell me otherwise).

The leading \n in the strings have been removed, but I could not figure out the best way to implement \n into a fuction unless that meant defining a function "print()" and call this function before every "print(string)" which felt very wrong, so some pointers on how to construct that function as you described it would be much appreciated.

Now I hope that I am atleast going in the right direction with this.

__author__ = 'Zoap'

import math


def info():

    print("This program allows you to search for the number of possible combinations of a pin number of length x, "
          "given that you know one of the digits")
    search()

def search():

    x = str(input("Input number to search for: "))

    if x.isdigit():
        pin_length(x)

    else:
        print("Number to search for must be a number!")
        search()

def pin_length(x):

    s = str(input("Input length of pin code: "))

    if s.isdigit() is False:
        print("Length must be a number!")
        pin_length(x)

    elif int(s) > 7:
        print("Length can not be more than 7 digits!")
        pin_length(x)

    else:
        check_stop(x, s)
        
def check_stop(x, s):

    stop = int((math.pow(10, int(s))))

    if stop < int(x):
        print("Length of pin makes the number to search for bigger than the possible number of variations!")
        search()

    else:
        calc_forloop(x, stop)

def calc_forloop(x, stop):

    number_list = []

    # For every integer in range add int to list and convert to string
    for i in range(0, (stop + 1)):
        number_list.append(str(i))

    #For every str in list containing x, count x
    x_numbers = [a for a in number_list if x in a]

    # Percent of total numbers/digits in range containing digit x
    percent = len(x_numbers) / (stop / 100)

    print_total = "That is a total of " + str("%.2f" % percent) + "%" " of all numbers between 0 and " + str(stop)

    if int(x) >= 10:
        print("There are a total of " + str(len(x_numbers)) +
              " numbers between 0 and " + str(stop) + " containing the number " + x)
        print(print_total)
        run_again()

    elif int(len(x_numbers)) is 1:
        print("There are a total of " + str(len(x_numbers)) +
              " number between 0 and " + str(stop) + " containing the digit " + x)
        print(print_total)
        run_again()

    else:
        print("There are a total of " + str(len(x_numbers)) +
                " numbers between 0 and " + str(stop) + " containing the digit " + x)
        print(print_total)
        run_again()

def run_again():

    yes = ["y", "Y"]
    no = ["N", "n"]

    choice = input("Run again? y/n: ")

    if choice in yes:
        search()

    elif choice in no:
        exit()

    else:
        print("Invalid input")
        run_again()

info()

This post has been edited by andrewsw: 01 December 2015 - 04:29 PM
Reason for edit:: Removed previous quote, just press REPLY

Was This Post Helpful? 0
  • +
  • -

#8 baavgai   User is offline

  • Dreaming Coder
  • member icon


Reputation: 7502
  • View blog
  • Posts: 15,546
  • Joined: 16-October 07

Re: My first Python program, tips and constructive critisism wanted

Posted 01 December 2015 - 05:05 PM

Oh dear. Ok, jumping about from function to function is... ok. However, if those functions then jump elsewhere and back on themselves... well, that's oddly worse than goto and for pretty much the same reasons.

A function should do one and onely one thing. It should do it well. You seem to be confused as to how to force the user into giving valid input. I'll offer you a freebie:
def run_again():
    result = None
    while result == None:
        choice = input("Run again? y/n: ")
        if choice in ["y", "Y"]:
            result = True
        elif choice in ["N", "n"]:
            result = False
        else:
            print("Invalid input")
    return result



Hope this helps.
Was This Post Helpful? 2
  • +
  • -

#9 Zoap   User is offline

  • New D.I.C Head

Reputation: 1
  • View blog
  • Posts: 7
  • Joined: 30-November 15

Re: My first Python program, tips and constructive critisism wanted

Posted 01 December 2015 - 07:22 PM

So basically, to keep stuff from not happening in functions do loops, and don't jump to functions, just trust the loops and call the functions in order?
Was This Post Helpful? 1
  • +
  • -

#10 jon.kiparsky   User is offline

  • Beginner
  • member icon


Reputation: 11690
  • View blog
  • Posts: 19,870
  • Joined: 19-March 11

Re: My first Python program, tips and constructive critisism wanted

Posted 01 December 2015 - 10:59 PM

+1 for this:

Quote

just trust the loops and call the functions in order


I know it's a little hard to make sense of all of this advice - none of us think this should be easy for you, so you shouldn't feel like you're missing something obvious. It's not obvious, at least until you understand it well, and that's why people who understand it get paid well.

That being said, yes: "trust the loops and call the functions in order" is a nice phrase, and we'll see if it means the right things as you go along with this.

Quote

The leading \n in the strings have been removed, but I could not figure out the best way to implement \n into a fuction unless that meant defining a function "print()" and call this function before every "print(string)" which felt very wrong, so some pointers on how to construct that function as you described it would be much appreciated.


I wouldn't try to define a function called "print()" - in python 2, it won't work since print is a reserved word and python will reject an attempt to redefine it, and in python 3 it's a core function, and redefining it will not make your life better. However, you might define a function with some other name - for example, "output" - which would do what you're looking for. For a start, let's make this function take a single argument s, and simply print s to the standard output, preceded by a newline. So if you define this function and use it in the python shell, you'd see the following:

Quote

>>> foo = "When in the course of four score and seven years, our fathers blow, and crack their cheeks with blowing"
>>> print foo
When in the course of four score and seven years, our fathers blow, and crack their cheeks with blowing
>>> output (foo)

When in the course of four score and seven years, our fathers blow, and crack their cheeks with blowing
>>>


Later on you can make this fancier, but try for this first.
Was This Post Helpful? 1
  • +
  • -

#11 baavgai   User is offline

  • Dreaming Coder
  • member icon


Reputation: 7502
  • View blog
  • Posts: 15,546
  • Joined: 16-October 07

Re: My first Python program, tips and constructive critisism wanted

Posted 02 December 2015 - 05:15 AM

View PostZoap, on 01 December 2015 - 10:22 PM, said:

So basically, to keep stuff from not happening in functions do loops, and don't jump to functions, just trust the loops and call the functions in order?


You got it!

Programming is an exercise in organization as much as anything else. Taking a complex task and breaking it down into many simpler, easier to understand, steps. When a programmer talks about maintainability, they're talking about organization. How easy is to figure out what's going on? How easy is it to change any aspect of what's going on?

One aspect of this is imposed ignorance. The less a given function knows about the rest of the program, the better. Ideally a function will take some parameters, do something, and return. The more general the function, the more you can reuse it in other code. Think about your print with the leading '\n'. It need only know that a string gets passed to it and nothing more, so is easy to use in other programs.

Look again at the main from the first code I offered:
def main():
    running = True
    # repeat until not running
    while running:
        do_something()
        # check if we should still be running
        running = check_still_going()



You needn't know what do_something() is doing to understand the snippet of code. All loops follow this broad pattern of "repeat until condition met." You trust that do_something() will come back to the caller when done and that this loop will control how often do_something() is run.

This particular pattern is so very common that game designers will often call it the "game loop". https://en.wikipedia...#Game_structure
Was This Post Helpful? 2
  • +
  • -

#12 Zoap   User is offline

  • New D.I.C Head

Reputation: 1
  • View blog
  • Posts: 7
  • Joined: 30-November 15

Re: My first Python program, tips and constructive critisism wanted

Posted 02 December 2015 - 07:01 AM

Newbie code v1.3

I figured out how to make the function for newline after some trial and error, also changed the names of some of the inputs to make them easier to understand when you are reading the code.

Something that is bothering me tho is that if I call the newline function (output_style(text)) it pushes the input() down below it and if I do input(output_style(text)) it prints "text" and then "none" below it, and after none is the start of the input marker. Whatever I try I can't seem to get the "text" and input on the same line when calling it through a function.

Overall I am happy with the result so far, it sure as hell looks better than my first attempt, so far you guys have been awesome, it's mighty nice of u to take some of your time and throw out a few hints and generall "good-to-know-stuff".

Keep up the feedback.


__author__ = 'Zoap'

import math

def output_style(text):

    print("\n" + text,)

def info():

    text = "This program allows you to search for the number of possible combinations of a pin number of length x, " \
        "given that you know one of the digits"

    output_style(text)

def search():

    loop = False

    while loop is False:

        text = "Input number to search for: "
        output_style(text) 
        search_x = str(input())

        if search_x.isdigit():
            loop = True

        else:
            text ="Number to search for must be a number!"
            output_style(text)

    return (loop, search_x)

def pin_length():

    loop = False

    while loop is False:

        text = "Input length of pin code: "
        output_style(text)
        pin = input()

        if pin.isdigit() is False:
            text = "Length must be a number!"
            output_style(text)

        elif int(pin) > 7:
            text = "Length can not be more than 7 digits!"
            output_style(text)

        elif search_x.isdigit() <= 0:
            text = "Length can not be equal to, or less than zero!"
            output_style(text)

        else:
            loop = True

    return (loop, pin)

def check_stop(search_x, pin):

    loop = False

    while loop is False:

        stop = int((math.pow(10, int(pin))))

        if stop < int(search_x):
            text = "Length of pin makes the number to search for bigger than the possible number of variations!"
            output_style(text)
            search()

        else:
            loop = True

    return (loop, stop)

def calc_forloop(search_x, stop):

    number_list = []

    # For every integer in range add int to list and convert to string
    for i in range(0, (stop + 1)):
        number_list.append(str(i))

    #For every str in list containing x, count x
    x_numbers = [a for a in number_list if search_x in a]

    # Percent of total numbers/digits in range containing digit x
    percent = len(x_numbers) / (stop / 100)

    print_total = "That is a total of " + str("%.2f" % percent) + "%" " of all numbers between 0 and " + str(stop)

    if int(search_x) >= 10:
        text ="There are a total of " + str(len(x_numbers)) +\
                " numbers between 0 and " + str(stop) + " containing the number " + search_x
        output_style(text)
        text = print_total
        output_style(text)

    elif int(len(x_numbers)) is 1:
        text = "There are a total of " + str(len(x_numbers)) +\
                 " number between 0 and " + str(stop) + " containing the digit " + search_x
        output_style(text)
        text = print_total
        output_style(text)

    else:
        text = "There are a total of " + str(len(x_numbers)) +\
                 " numbers between 0 and " + str(stop) + " containing the digit " + search_x
        output_style(text)
        text = print_total
        output_style(text)

def run_again():

    loop = None

    while loop is None:

        text = "Run again? y/n: "
        output_style(text)

        choice = input()
        if choice in ["y", "Y"]:
            loop = True
            main_loop = True

        elif choice in ["n", "N"]:
            loop = False
            main_loop = False

        else:
            text = "Invalid input"
            output_style(text)

    return (loop, main_loop)

main_loop = True

while main_loop is True:
    string = info()
    _, search_x = search()
    _, pin = pin_length()
    _, stop = check_stop(search_x, pin)
    calc_forloop(search_x, stop)
    _, main_loop = run_again()

Was This Post Helpful? 0
  • +
  • -

#13 baavgai   User is offline

  • Dreaming Coder
  • member icon


Reputation: 7502
  • View blog
  • Posts: 15,546
  • Joined: 16-October 07

Re: My first Python program, tips and constructive critisism wanted

Posted 02 December 2015 - 09:06 AM

Looking better.

I'll just offer some comments on a portion of this.

def run_again():
    # loop is kind of confusing for a var name
    # loop = None
    result = None
    while result in None:
        # no reason to take two lines for this
        # text = "Run again? y/n: "
        # output_style(text)
        output_style("Run again? y/n: ")
        choice = input()
        if choice in ["y", "Y"]:
            # loop = True
            # I don't understand main_loop here
            # main_loop = True
            result = True
        elif choice in ["n", "N"]:
            result = False 
        else:
            output_style("Invalid input")
    return result

# give this it's own function
def main():
    # main_loop = True
    running = True

    # again, stop checking bools
    # while main_loop is True:
    while running:
        # this returns nothing, what are you going to do with string?
        # string = info()
        info()
        # if your program isn't using a value
        # then why are you returning it?
        # _, search_x = search()
        search_x = search()
        pin = pin_length()
        stop = check_stop(search_x, pin)
        calc_forloop(search_x, stop)
        running = run_again()

main() # call the function



Also, some confusing if-then:
def calc_forloop(search_x, stop):
    # ...

    # you seem to be doing the same thign a lot here, look at it again

    if int(search_x) >= 10:
        text ="There are a total of " + str(len(x_numbers)) +\
                " numbers between 0 and " + str(stop) + " containing the number " + search_x
    else:
        text = "There are a total of " + str(len(x_numbers)) +\
                 " numbers between 0 and " + str(stop) + " containing the digit " + search_x
    output_style(text)
    output_style("That is a total of " + str("%.2f" % percent) + "%" " of all numbers between 0 and " + str(stop))



Hope this helps.
Was This Post Helpful? 0
  • +
  • -

#14 jon.kiparsky   User is offline

  • Beginner
  • member icon


Reputation: 11690
  • View blog
  • Posts: 19,870
  • Joined: 19-March 11

Re: My first Python program, tips and constructive critisism wanted

Posted 02 December 2015 - 10:01 AM

View PostZoap, on 02 December 2015 - 09:01 AM, said:

Newbie code v1.3

Much improved! baavgai has some good suggestions for you. I would add that I'm not sure why you're returning loop from those functions, since you're throwing it away when you actually call them.

Quote

I figured out how to make the function for newline after some trial and error,


Looks good - this is one of several reasonable ways that you could have done this.

Quote

also changed the names of some of the inputs to make them easier to understand when you are reading the code.


This is important - it's good that you're paying attention to readability.

Quote

Something that is bothering me tho is that if I call the newline function (output_style(text)) it pushes the input() down below it and if I do input(output_style(text)) it prints "text" and then "none" below it, and after none is the start of the input marker. Whatever I try I can't seem to get the "text" and input on the same line when calling it through a function.


So, the input function takes an optional string as a parameter. If this is provided, it'll use that string as a prompt. Maybe you could make a function similar to output_style, which would make use of this feature? This would look a lot like your output_style function. Again, the point here is to find places where you do the same thing repeatedly, and turn those repetitions into function calls. Some people will talk about reducing the number of lines here. To me, that's beside the point. Yes, fewer lines makes it easier to find what you're looking for, but the real win here is that you're capturing a behavior and giving it a name, which means you can talk about it and change it as one behavior - you've gathered up this behavior and now you're in control of it. This is a good thing.

Another thing you might think about: are you happy with the way you handle strings here? I see a lot of places where you need a string, so you just define it and use it, and go on your way. Does this make you happy? This is not a critical issue, strictly bonus points, but it's worth thinking about - what could you do to make these strings a little easier to work with?
Was This Post Helpful? 0
  • +
  • -

#15 Zoap   User is offline

  • New D.I.C Head

Reputation: 1
  • View blog
  • Posts: 7
  • Joined: 30-November 15

Re: My first Python program, tips and constructive critisism wanted

Posted 02 December 2015 - 01:36 PM

Quote

I would add that I'm not sure why you're returning loop from those functions, since you're throwing it away when you actually call them.


This is because I assumed that this was required to end the loop by returning the value of loop to the top, obviously I was wrong to assume that.

Quote

Another thing you might think about: are you happy with the way you handle strings here? I see a lot of places where you need a string, so you just define it and use it, and go on your way. Does this make you happy? This is not a critical issue, strictly bonus points, but it's worth thinking about - what could you do to make these strings a little easier to work with?


I was thinking about adding a function "strings" or something like that and define each string individually and then call each string at the appropriate time, am I on to something here?

Or is that just making shit more complicated than it has to be?

And baavgai, I have looked at and applied changes according to your comments, with my own twists and inputs ofc, also I would like to defend my honor by saying that the "string = info()" thing was a remnant from my trial and error with the output_style() function.


Thank's guys, for pointing me in the right direction regarding basic manners in Python code writing, and helping me stretch out a few questionmarks.
Was This Post Helpful? 0
  • +
  • -

  • (2 Pages)
  • +
  • 1
  • 2