Instruction You will create an application that consumes the World Population AP
ID: 3813444 • Letter: I
Question
Instruction
You will create an application that consumes the World Population API and allows individuals to view a list of countries. The Show method of each Country should display the age distribution of the population of the selected country for the current year.
I have created a new Rails application called “worldpopulation”. This application will have one (and only one!) model: Country. Scaffold it according to the following diagram:
Question
In the index method for Country, check to see if there are any Country objects currently stored in the database. IF NOT, query the API and create a new Country object for each country returned from the service. (HINT: write a CLASS METHOD in the Country model that contains the code to execute the query and update the database.)
Link to World Population API http://api.population.io/#!/countries/listCountries
Explanation / Answer
def is_bintree(T):
if type(T) isn't tuple:
come back False
if T == ():
come back True
if len(T) != 3:
come back False
if is_bintree(T[1]) and is_bintree(T[2]):
come back True
come back False
def bst_min(T):
if T == ():
come back None
if not T[1]:
come back T[0]
come back bst_min(T[1])
def bst_max(T):
if T == ():
come back None
if not T[2]:
come back T[0]
come back bst_max(T[2])
def is_bst(T):
if not is_bintree(T):
come back False
if T == ():
come back True
if not is_bst(T[1]) or not is_bst(T[2]):
come back False
if T[1] == () and T[2] == ():
come back True
if T[2] == ():
come back bst_max(T[1]) < T[0]
if T[1] == ():
come back T[0] < bst_min(T[2])
come back bst_max(T[1]) < T[0] < bst_min(T[2])
def bst_search(T,x):
if T == ():
return T
if T[0] == x:
return T
if x < T[0]:
come back bst_search(T[1],x)
come back bst_search(T[2],x)
def bst_insert(T,x):
if T == ():
return (x,(),())
elif x < T[0]:
come back (T[0],bst_insert(T[1],x),T[2])
else:
come back (T[0],T[1],bst_insert(T[2],x))
def delete_min(T):
if T == ():
return T
if not T[1]:
come back T[2]
else:
come back (T[0],delete_min(T[1]),T[2])
def bst_delete(T,x):
assert T, "deleting price not in tree"
if x < T[0]:
come back (T[0],bst_delete(T[1],x),T[2])
elif x > T[0]:
come back (T[0],T[1],bst_delete(T[2],x))
else:
# T[0] == x
if not T[1]:
come back T[2]
elif not T[2]:
come back T[1]
else:
come back (bst_min(T[2]),T[1],delete_min(T[2]))
def print_bintree(T,indent=0):
if not T:
print('*')
return
else:
print(T[0])
print(' '*(indent + len(T[0])-1)+'---', end = '')
print_bintree(T[1],indent+3)
print(' '*(indent + len(T[0])-1)+'---', end = '')
print_bintree(T[2],indent+3)
def print_func_space(x):
print(x,end=' ')
def inorder(T,f):
if not is_bst(T):
return
if not T:
return
inorder(T[1],f)
f(T[0])
inorder(T[2],f)
# Programming project: offer implementations for the functions below,
# i.e., replace all the pass statements within the functions below.
# Then add tests for these functions within the block # that starts "if __name__ == '__main__':"
def preorder(T,f):
pass
def postorder(T,f):
pass
def tree_height(T):
# Empty tree has height -1
pass
def balance(T):
# returns the peak of the left subtree of T
# # minus the peak of the proper subtree of T
# i.e., the balance of the foundation of T
pass
def minBalance(T):
# returns the minimum price of balance(S) for all subtrees S of T
pass
def maxBalance(T):
# returns the most price of balance(S) for all subtrees S of T
pass
def is_avl(T):
# Returns True if T is associate AVL tree, False otherwise
# # Hint: use minBalance(T) and maxBalance(T)
pass
# Add tests for the on top of seven functions below
if __name__ == '__main__':
K = ()
for x in ['Joe','Bob', 'Phil', 'Paul', 'Marc', 'Jean', 'Jerry', 'Alice', 'Anne']:
K = bst_insert(K,x)
print(' Tree components in sorted order ')
inorder(K,print_func_space)
print()
print(' Print full tree ')
print_bintree(K)
print(" Delete Bob and print tree ")
K = bst_delete(K,'Bob')
print_bintree(K)
print()
print(" Print subtree at 'Phil' ")
print_bintree(bst_search(K,'Phil'))
print()