Slicing a string into three pieces, and also controlling/manipulating through loops # Filename: P05_Strings.py
# Author: Joseph Chua
# Date: 10/18/2016
# Purpose: Slicing a string into THREE pieces.
# Other: http://repeatercreeper.me

#=======================================================================
# Logic - Assignment #1
#=======================================================================
userInp = input("Enter Here: ")

while (len(userInp) % 3) != 0: # Keep adding whitespace until divisible by 3
    userInp += " " # Concatenation of whitespace

def split(str, num):
    return [ str[i:i+num] for i in range(0, len(str), num) ]

print ("Original String: " + userInp)
# Creates 3 variables to store each slices. Sliced using 'split' function.
slice1, slice2, slice3 = split(userInp, int(len(userInp) / 3))

# Prints the results in THREE slices.
print("Slice #1: " + slice1)
print("Slice #2: " + slice2)
print("Slice #3: " + slice3)

#=======================================================================
# Logic - Assignment #2
#=======================================================================
quote = input("Enter a quote: ")
i = 0

if (len(quote.split(' '))) &gt;= 2:
    splitQuote = quote.split(' ')
    while i != 3:
        if i == 0:
            print("Split: ", splitQuote)
        elif i == 1:
            ccString = ""
            for j in range(0, len(splitQuote)):
                ccString += splitQuote[j]
            print("Concatinate: ", ccString)
        else:
            charUse = ","
            print("Join: ", charUse.join(splitQuote))

        i += 1
else:
    print("You entered an invalid quote!")


I'm mostly looking at my Assignment #2. It looks like it has plenty of room for improvements, but if you find something to improve on Assignment #1 to make it more concise that would be amazing.

So for Assignment #2 objective was as follows (copy &amp; paste directly from the book):


  Activity 2: Write the Python code to split, join, and concatenate a string. 
  
  
  a)  Allow the user to input a string (a famous quote) that will be manipulated within a While loop.a.   Print the string that was entered.
  
  b)    Within a WHILE loop that iterates three (3) times, manipulate the string.
  
  If the loop iteration is the first time, split the quote into separate words and print the result of the split operation.
  If the loop iteration is the second time, concatenate the split string (list of words) in an order you choose and print the result of the concatenation operation.
  If the loop iteration is the third time, join the split string content (list of words) with a character(s) of your choosing and print the result of the join operation.
I concur with @200_success, looping three times and doing something different every loop is totally pointless. Regardless, if I had to use a loop for it, I would use for i in range(3) and not a while loop to do it.
I do not agree with your if (len(quote.split(' '))) &gt;= 2:. For me this is a totally legit quote:

Awesome!
-- Barney Stinson, How I Met Your Mother

Also, the split is done twice here, at least do it before the check.
And actually, all of your code does not care if the length is 1 or even 0:
# Length 1
&gt;&gt;&gt; &quot;Awesome!&quot;.split()
[&quot;Awesome!&quot;]
&gt;&gt;&gt; &quot; &quot;.join([&quot;Awesome!&quot;])
&quot;Awesome!&quot;
#Length 0
&gt;&gt;&gt; &quot;&quot;.split()
[]
&gt;&gt;&gt; &quot; &quot;.join([])
''

Note that str.split splits on white-space by default, so there is no need to do split(&quot; &quot;), unless you specifically do not want to also split on newlines. Incidentally, I would consider this a bug in your code. The quote Awesome\nSuit! would be recognized as one word by your code.
The only part where it is not obvious that a length 0 quote is fine is
ccString = &quot;&quot;
for j in range(0, len(splitQuote)):
     ccString += splitQuote[j]
print(&quot;Concatinate: &quot;, ccString)

But range(0, 0) returns [] and a for loop over an empty list does nothing. So this is also safe. And I would suggest a different approach here, anyways.
This code is equivalent to print(&quot;Concatinate: &quot;, &quot;&quot;.join(splitQuote). But that's really boring and just a special case of the next loop, with an empty character. I think using random.sample would be slightly more interesting:
import random
...
print(&quot;Concatinate: &quot;, &quot;&quot;.join(random.sample(splitQuote, len(splitQuote))`


To improve maintainability and readability, I would put the two assignments into separate functions, where the docstring describes what the assignment was. Then I would add:
if __name__ == '__main__':
    assignment1()
    assignment2()


Last, but not least, you should have a look at PEP8, Python's official style-guide. One thing it recommends is using lower_case for variables (and functions) and not camelCase.