---
# System prepended metadata

title: Python Arguments Workshop

---

# Python Arguments Workshop


# What are arguments?
Arguments: Files and other data provided by the user needed to run a command 

example: `python3 main.py http://example.com`

command = `python3`
arguments =  `main.py, http://example.com`

Resource: https://www.geeksforgeeks.org/command-line-arguments-in-python/

# Why use arguments?
We use arguments and user input to make the program more dynamic compared to hard coding values directly into the code.

#### Why use arguments over raw input?

sys.argv vs. input('enter stuff here: ')

1. Depends on what you are writing the code for.
    a. quick script to automate stuff on the side
    ---------OR-----------
    b. a user interactive program
    
https://stackoverflow.com/questions/8246822/argv-vs-raw-input

# How to interact with commandline arguments in Python

There are several ways to interact with arguments.
We will use the 'argv' function from Python's 'sys' module
https://docs.python.org/3/library/sys.html

    import sys
    arguments = sys.argv
    
argv is a list of argument values.
    
    sys.argv[0] = first_value_in_list
    # it is usually the python file being ran
    
    example: python3 main.py http://example.com
    sys.argv[0] = main.py
    sys.argv[1] = http://example.com
    
#### A small review on python lists
https://www.w3schools.com/python/python_lists.asp
https://www.tutorialspoint.com/python/python_lists.htm

Lists are defined by square brackets, [].
Items inside the list have an index number.
[-1] = last item in list
[-2] = second to last item in list

list = [1,2,3,4,5,6]
list[1:5] = starting from index 1 to index 5, but not including index 5
    output = [2,3,4,5]
    
list[:2]
    output = [1,2]
list[-2:]
    output = [6,5]

Example

    list_of_stuff = ['apple', 'orange', 'banana']
    list_of_stuff[0] = apple
    list_of_stuff[1] = orange
    
# Practice Problems


#### 1. Given an int count of a number of donuts, return a string of the form 'Number of donuts: [count]', where [count] is the number passed in. However, if the count is 10 or more, then use the word 'many' instead of the actual count. So donuts(5) returns 'Number of donuts: 5' and donuts(23) returns 'Number of donuts: many'

SAMPLE INPUT:
    
    python3 your_app.py 5
SAMPLE OUTPUT:

    python3 your_app.py 5
    Number of donuts: 5
    
#### Boilerplate code to get you started

        #--------import sys module---------#
    import sys
    
        #--------create a function---------#
    def name_of_function():
    
        #--------insert 
                 code 
                 here---------#
        
        
        
        
        
        #--------call your function---------#
    name_of_function()
    
    
        

---

#### 2. Given a string s, return a string made of the first 2 and the last 2 chars of the original string, so 'spring' yields 'spng'. However, if the string length is 2 or less, return instead the empty string.

SAMPLE INPUT:

    python3 your_app.py spring
SAMPLE OUTPUT:

    python3 your_app.py spring
    spng
    
---

#### 3. Given a list of strings, return the count of the number of strings where the string length is 2 or more and the first and last chars of the string are the same.

Note: python does not have a ++ operator, but += works.

SAMPLE INPUT:

    python3 your_app.py aba xyz aa x bbb
SAMPLE OUTPUT:

    python3 your_app.py aba xyz aa x bbb
    3

----

#### 4. Given a list of strings, return a list with the strings in sorted order, except group all the strings that begin with 'x' first. e.g. ['mix', 'xyz', 'apple', 'xanadu', 'aardvark'] yields ['xanadu', 'xyz', 'aardvark', 'apple', 'mix']

Hint: this can be done by making 2 lists and sorting each of them before combining them.

SAMPLE INPUT:

    python3 your_app.py bbb ccc axx xzz xaa
    
SAMPLE OUTPUT:

    python3 your_app.py bbb ccc axx xzz xaa
    ['xaa', 'xzz', 'axx', 'bbb', 'ccc']





    




