Need help with this python question with to parts. The first part doesn't correspond with the second part and vise versa. You can't use break, str.endswith, list.index, keywords like: await, as, assert, class, except, lambda, and built in functions like: any, all, breakpoint, callable.   1. AB Verify   Your goal is to write a recursive function called in a file ab_verify.py which determines whether the string passed to the function has more a's than (or equal numbers of) b's counted from the start to any given point.   The function ab_verify should take two arguments, the first one is the string, the second one will have zero passed in during testing but you can modify it during the recursion.     For instance: aab should return True abba should return False aabb should return True since it's equal aabaabaab should return True   You may assume that the string is entirely a's and b's.     I used the driver code: s = input('Enter a string to test: ') while s != 'quit':    print(ab_verify(s, 0))    s = input('Enter a string to test: ')                                                                                        Sample Output   linux5[281]% python3 ab_verify.py Enter a string to test: aab True Enter a string to test: abba False Enter a string to test: ababab True Enter a string to test: aabbbbbaaaaabbbabaabababa False Enter a string to test: abb False Enter a string to test: aabaabaab True Enter a string to test: quit   2. (question in images) Spider Webbing Sample Output linux5[109]% python3 spider_web.py Input num_nodes, seed: 5, 101 {'Node 1': ['Node 2', 'Node 3', 'Node 5', 'Node 4'], 'Node 2': ['Node 1', 'Node 4', 'Node 3'], 'Node 3': ['Node 1', 'Node 2', 'Node 4', 'Node 5'], 'Node 4': ['Node 1', 'Node 2', 'Node 3', 'Node 5'], 'Node 5': ['Node 1', 'Node 3', 'Node 4']} ['Node 1', 'Node 2', 'Node 4', 'Node 3', 'Node 5'] linux5[110]% python3 spider_web.py Input num_nodes, seed: 8, 2323 {'Node 1': ['Node 8', 'Node 3', 'Node 5', 'Node 6', 'Node 7', 'Node 4'], 'Node 2': ['Node 6', 'Node 8'], 'Node 3': ['Node 1', 'Node 7', 'Node 6', 'Node 4'], 'Node 4': ['Node 1', 'Node 3', 'Node 8', 'Node 5'], 'Node 5': ['Node 1', 'Node 4', 'Node 8', 'Node 6'], 'Node 6': ['Node 1', 'Node 2', 'Node 3', 'Node 5', 'Node 8', 'Node 7'], 'Node 7': ['Node 1', 'Node 3', 'Node 6'], 'Node 8': ['Node 1', 'Node 2', 'Node 4', 'Node 5', 'Node 6']} ['Node 1', 'Node 8'] linux5[111]% python3 spider_web.py Input num_nodes, seed: 5, 6554 {'Node 1': [], 'Node 2': ['Node 4', 'Node 5'], 'Node 3': [], 'Node 4': ['Node 2'], 'Node 5': ['Node 2']} []  ([] means no path) Coding Standards Constants above your function definitions, outside of the "if __name__ == '__main__':" block.   A magic value is a string which is outside of a print or input statement, but is used to check a variable, so for instance: print(first_creature_name, 'has died in the fight. ') does not involve magic values. However, if my_string == 'EXIT':  exit is a magic value since it's being used to compare against variables within your code, so it should be: EXIT_STRING = 'EXIT' ... if my_string == EXIT_STRING: A number is a magic value when it is not 0, 1, and if it is not 2 being used to test parity (even/odd). A number is magic if it is a position in an array, like my_array[23], where we know that at the 23rd position, there is some special data.  Instead it should be USERNAME_INDEX = 23 my_array[USERNAME_INDEX] Constants in mathematical formulas can either be made into official constants or kept in a formula.   Previously checked coding standards involving: snake_case_variable_names CAPITAL_SNAKE_CASE_CONSTANT_NAMES Use of whitespace (2 before and after a function, 1 for readability.)

C++ Programming: From Problem Analysis to Program Design
8th Edition
ISBN:9781337102087
Author:D. S. Malik
Publisher:D. S. Malik
Chapter18: Stacks And Queues
Section: Chapter Questions
Problem 16PE: The implementation of a queue in an array, as given in this chapter, uses the variable count to...
icon
Related questions
Question

Need help with this python question with to parts. The first part doesn't correspond with the second part and vise versa. You can't use break, str.endswith, list.index, keywords like: await, as, assert, class, except, lambda, and built in functions like: any, all, breakpoint, callable.

 

1. AB Verify

 

Your goal is to write a recursive function called in a file ab_verify.py which determines whether the string passed to the function has more a's than (or equal numbers of) b's counted from the start to any given point.

 

The function ab_verify should take two arguments, the first one is the string, the second one will have zero passed in during testing but you can modify it during the recursion.  

 

For instance:

aab should return True

abba should return False

aabb should return True since it's equal

aabaabaab should return True

 

You may assume that the string is entirely a's and b's.  

 

I used the driver code:

s = input('Enter a string to test: ')

while s != 'quit':

   print(ab_verify(s, 0))

   s = input('Enter a string to test: ')

 

                                                                                     Sample Output

 

linux5[281]% python3 ab_verify.py

Enter a string to test: aab

True

Enter a string to test: abba

False

Enter a string to test: ababab

True

Enter a string to test: aabbbbbaaaaabbbabaabababa

False

Enter a string to test: abb

False

Enter a string to test: aabaabaab

True

Enter a string to test: quit

 

2. (question in images)

Spider Webbing Sample Output

linux5[109]% python3 spider_web.py

Input num_nodes, seed: 5, 101

{'Node 1': ['Node 2', 'Node 3', 'Node 5', 'Node 4'], 'Node 2': ['Node 1', 'Node 4', 'Node 3'], 'Node 3': ['Node 1', 'Node 2', 'Node 4', 'Node 5'], 'Node 4': ['Node 1', 'Node 2', 'Node 3', 'Node 5'], 'Node 5': ['Node 1', 'Node 3', 'Node 4']}

['Node 1', 'Node 2', 'Node 4', 'Node 3', 'Node 5']


linux5[110]% python3 spider_web.py

Input num_nodes, seed: 8, 2323

{'Node 1': ['Node 8', 'Node 3', 'Node 5', 'Node 6', 'Node 7', 'Node 4'], 'Node 2': ['Node 6', 'Node 8'], 'Node 3': ['Node 1', 'Node 7', 'Node 6', 'Node 4'], 'Node 4': ['Node 1', 'Node 3', 'Node 8', 'Node 5'], 'Node 5': ['Node 1', 'Node 4', 'Node 8', 'Node 6'], 'Node 6': ['Node 1', 'Node 2', 'Node 3', 'Node 5', 'Node 8', 'Node 7'], 'Node 7': ['Node 1', 'Node 3', 'Node 6'], 'Node 8': ['Node 1', 'Node 2', 'Node 4', 'Node 5', 'Node 6']}

['Node 1', 'Node 8']


linux5[111]% python3 spider_web.py

Input num_nodes, seed: 5, 6554

{'Node 1': [], 'Node 2': ['Node 4', 'Node 5'], 'Node 3': [], 'Node 4': ['Node 2'], 'Node 5': ['Node 2']}

[] 

([] means no path)



Coding Standards

  1. Constants above your function definitions, outside of the "if __name__ == '__main__':" block.  
    1. A magic value is a string which is outside of a print or input statement, but is used to check a variable, so for instance:
      1. print(first_creature_name, 'has died in the fight. ') does not involve magic values.
      2. However, if my_string == 'EXIT':  exit is a magic value since it's being used to compare against variables within your code, so it should be:
        EXIT_STRING = 'EXIT'

...
if my_string == EXIT_STRING:

  1. A number is a magic value when it is not 0, 1, and if it is not 2 being used to test parity (even/odd).
  2. A number is magic if it is a position in an array, like my_array[23], where we know that at the 23rd position, there is some special data.  Instead it should be
    USERNAME_INDEX = 23

my_array[USERNAME_INDEX]

  1. Constants in mathematical formulas can either be made into official constants or kept in a formula.  
  1. Previously checked coding standards involving:
    1. snake_case_variable_names
    2. CAPITAL_SNAKE_CASE_CONSTANT_NAMES
    3. Use of whitespace (2 before and after a function, 1 for readability.)
Spider Webbing
Create a recursive function in a file called spider_web.py:
This is going to be a guided problem more than most of the others on this homework. This will teach you some basic
pathfinding in a network (graph) for the project. You can use this problem to build your project so l would recommend
working on this problem until you understand it.
Imagine there is a spider web:
Our goal is to find a path (not the best path, but just any path) from A to Z You see that the green path is not the
shortest but it does let us navigate from start to finish.
How can we do this?
First, we need to know A and Z, our starting and ending points. We'll pass these into our function.
I'm going to use a dictionary to represent this graph. Each node (vertex, circle) will have a name, in this case "A" and 'Z"
were the names of the nodes, but in the generated maps l'm going to use "Node 1", "Node 2", "Node 3", etc.
Here is an example web_map
web_map = {
"Node 1: ['Node 3, 'Node 2],
"Node 2: ['Node 1', 'Node 41.
"Node 3: [Node l],
Node 4: ['Node 2]
}
Nodel is connected to 2 and 3 for instance, and then also note that Node 3 is connected back to Node 1. Similariy, Node
2 is connected back to Node 1.
Then there's a connection between Node 2 and Node 4 that also goes both ways. All connections in our web will be
bi-directional.
So, in order to find the path from the start to the finish we should check if there's a path recursively through any of the
nodes connected to wherever we start.
Transcribed Image Text:Spider Webbing Create a recursive function in a file called spider_web.py: This is going to be a guided problem more than most of the others on this homework. This will teach you some basic pathfinding in a network (graph) for the project. You can use this problem to build your project so l would recommend working on this problem until you understand it. Imagine there is a spider web: Our goal is to find a path (not the best path, but just any path) from A to Z You see that the green path is not the shortest but it does let us navigate from start to finish. How can we do this? First, we need to know A and Z, our starting and ending points. We'll pass these into our function. I'm going to use a dictionary to represent this graph. Each node (vertex, circle) will have a name, in this case "A" and 'Z" were the names of the nodes, but in the generated maps l'm going to use "Node 1", "Node 2", "Node 3", etc. Here is an example web_map web_map = { "Node 1: ['Node 3, 'Node 2], "Node 2: ['Node 1', 'Node 41. "Node 3: [Node l], Node 4: ['Node 2] } Nodel is connected to 2 and 3 for instance, and then also note that Node 3 is connected back to Node 1. Similariy, Node 2 is connected back to Node 1. Then there's a connection between Node 2 and Node 4 that also goes both ways. All connections in our web will be bi-directional. So, in order to find the path from the start to the finish we should check if there's a path recursively through any of the nodes connected to wherever we start.
However, if we do this, we'll end up getting a RecursionError:
RecursionError: maximum recursion depth exceeded in comparison
Don't worry we're going to fixit. Let's create a new dictionary with the nodes the same as the nodes in the web_map.
Then we'll set all of them to False. You can call this visited, seen, been_there, whatever as long as it records when we visit
a node.
Whenever you visit a node, mark it as visited, and then don't go there again.
But how do we set all this up if the function we need to call is:
de: apides_mab (mab_map, atasting place, deatination) :
Here's the next hint: Make a recursive helper function that does most of the work that is called by the function you are
required to make.
Can the signature be the same gtthe recursive helper?
er apides wab halper (wab map, Curzent place, deatination, visitad) :
Note that the signature is different The reason is because we need to keep the visited list and pass it around all the
recursive calls.
Lastiy, how do we stop? Perhaps we should have considered this first, but that's the way I wrote this so let's consider it
now. We stop in two ways. Either we exhaust all our options and everything is visited. We never actually check if
everything is visited but we will run out of options and not find a path.
But, if we do find a path, we should return a list representing the path. What is the first link in the chain of that path?
When the current_place is equal to the destination. That tells us that our search is complete and we found the end of
the path.
As the recursion unwinds we should add the current_place to the path until we have reached the top of the recursion,
then return that list to the big spider_web function. Finally that function will return that list to the caller.
Starter Code
I've given you some starter code for the purpose of a head start on this problem. You can get it using the copy
command:
cp /afsíumbc.edu/usersle/rlerica/pub/cs201/fal 21/spider_web.py.
I've structured the starter code but you can modify the function headers for spider_web_rec if you want or if you find a
different way to do it.
Transcribed Image Text:However, if we do this, we'll end up getting a RecursionError: RecursionError: maximum recursion depth exceeded in comparison Don't worry we're going to fixit. Let's create a new dictionary with the nodes the same as the nodes in the web_map. Then we'll set all of them to False. You can call this visited, seen, been_there, whatever as long as it records when we visit a node. Whenever you visit a node, mark it as visited, and then don't go there again. But how do we set all this up if the function we need to call is: de: apides_mab (mab_map, atasting place, deatination) : Here's the next hint: Make a recursive helper function that does most of the work that is called by the function you are required to make. Can the signature be the same gtthe recursive helper? er apides wab halper (wab map, Curzent place, deatination, visitad) : Note that the signature is different The reason is because we need to keep the visited list and pass it around all the recursive calls. Lastiy, how do we stop? Perhaps we should have considered this first, but that's the way I wrote this so let's consider it now. We stop in two ways. Either we exhaust all our options and everything is visited. We never actually check if everything is visited but we will run out of options and not find a path. But, if we do find a path, we should return a list representing the path. What is the first link in the chain of that path? When the current_place is equal to the destination. That tells us that our search is complete and we found the end of the path. As the recursion unwinds we should add the current_place to the path until we have reached the top of the recursion, then return that list to the big spider_web function. Finally that function will return that list to the caller. Starter Code I've given you some starter code for the purpose of a head start on this problem. You can get it using the copy command: cp /afsíumbc.edu/usersle/rlerica/pub/cs201/fal 21/spider_web.py. I've structured the starter code but you can modify the function headers for spider_web_rec if you want or if you find a different way to do it.
Expert Solution
trending now

Trending now

This is a popular solution!

steps

Step by step

Solved in 2 steps with 2 images

Blurred answer
Knowledge Booster
Computational Systems
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
C++ Programming: From Problem Analysis to Program…
C++ Programming: From Problem Analysis to Program…
Computer Science
ISBN:
9781337102087
Author:
D. S. Malik
Publisher:
Cengage Learning