04 Prove Assignment: Writing Functions

Purpose

Prove that you can write functions with parameters and call those functions multiple times with arguments.

Problem Statement

In English, a preposition is a word used to express spatial or temporal relations, such as “in”, “over”, and “before”. A prepositional phrase is group of words that begins with a preposition and includes a noun. For example:

above the water
in the kitchen
after the meeting

Assignment

Write the second half of a Python program that generates simple English sentences that you began in the previous lesson’s prove milestone. As part of the previous lesson’s prove milestone, you wrote a program that generates English sentences with three parts: a determiner, a noun, and a verb. During this prove assignment, you will add functions so that your program generates sentences with four parts:

  1. a determiner
  2. a noun
  3. a verb
  4. a prepositional phrase

For example:

One girl talked for the car.
A bird drinks off one child.
The child will run on the car.
Some dogs drank above many rabbits.
Some children laugh at many dogs.
Some rabbits will talk about some cats.

To complete this prove assignment, your program must include at least these seven functions:

  1. main
  2. make_sentence
  3. get_determiner
  4. get_noun
  5. get_verb
  6. get_preposition
  7. get_prepositional_phrase

You may add other functions if you find them helpful. The get_preposition function must randomly choose a preposition from a list and return the randomly chosen preposition. The get_prepositional_phrase function must make a prepositional phrase by calling the get_preposition, get_determiner, and get_noun functions.

Help

If you’re having trouble completing this assignment, reading related online documentation, using a generative AI as a tutor, or working with a human tutor will help you complete it.

Helpful Documentation

Help from an AI Tutor

You could use a generative AI as a tutor to help you write and troubleshoot your program. Bro. Lee Barney created a custom Chat GPT named Pythonista that is fine-tuned to focus on Python functions, loops, if statements, and related programming concepts. If your program is generating an error, ask Pythonista a question like this:

I'm writing a Python program that generates simple, random English sentences. When I run my program, it causes the following error. Please suggest some mistakes that might cause this error.

(Copy and paste the error message here.)

You could also ask Pythonista a question about one of your functions, like this:

I wrote the following Python function that is supposed to (type a short description here). However, the function isn't (type what it's not doing correctly here). Please help me fix this function.

(Copy and paste your Python function here.)

Help from a Human Tutor

As a BYU-Idaho campus or online student you can get help from a tutor to complete your CSE 111 assignments. Each tutor is a current BYU-Idaho student employed by BYU-Idaho. Meeting with a tutor is free. It will not cost you any money to meet with a tutor. To get help from a tutor, you simply make an appointment and then meet with the tutor. Campus students meet with tutors in the tutoring center. Online students meet with tutors in Zoom. To make an appointment, follow the instructions in the course tutoring guide.

Steps

Do the following:

  1. Use the get_determiner function from the previous lesson’s prove milestone as an example to help you write the get_preposition function. The get_preposition function must have the following header and fulfill the requirements of the following documentation string.
    def get_preposition():
        """Return a randomly chosen preposition
        from this list of prepositions:
            "about", "above", "across", "after", "along",
            "around", "at", "before", "behind", "below",
            "beyond", "by", "despite", "except", "for",
            "from", "in", "into", "near", "of",
            "off", "on", "onto", "out", "over",
            "past", "to", "under", "with", "without"
    
        Return: a randomly chosen preposition.
        """
    
  2. Write the get_prepositional_phrase function to have the following header and fulfill the requirements of the following documentation string.
    def get_prepositional_phrase(quantity):
        """Build and return a prepositional phrase composed
        of three words: a preposition, a determiner, and a
        noun by calling the get_preposition, get_determiner,
        and get_noun functions.
    
        Parameter
            quantity: an integer that determines if the
                determiner and noun in the prepositional
                phrase returned from this function should
                be single or plural.
        Return: a prepositional phrase.
        """
    
  3. Add code to the make_sentence function and write any other functions that you think are necessary for your program to generate and print six sentences, each with a determiner, a noun, a verb, and a prepositional phrase. The six sentences must have the following characteristics:

    Quantity Verb Tense
    a. single past
    b. single present
    c. single future
    d. plural past
    e. plural present
    f. plural future

Call Graph

The following call graph shows the user-defined functions and function calls and returns as you should write them in your sentences.py program. From this call graph we see the following function calls:

  1. The computer starts executing the sentences.py program by calling the main function.
  2. While executing the main function, the computer calls the make_sentence function.
  3. While executing the make_sentence function, the computer calls the get_determiner, get_noun, get_verb, and get_prepositional_phrase functions.
  4. While executing the get_prepositional_phrase function, the computer calls the get_preposition, get_determiner, and get_noun functions.
  5. While executing each of the get_determiner, get_noun, get_verb, and get_preposition functions, the computer calls the random.choice function.
  6. Then, the computer executes the str.capitalize method.
  7. Finally, the computer executes the print function.
The call graph for a program that builds and prints sentences
The call graph for a program that builds and prints sentences. Notice in the call graph that the get_prepositional_phrase function calls the get_preposition, get_determiner, and get_noun functions.

Testing Procedure

Verify that your test program works correctly by following each step in this procedure:

  1. Run your sentences.py program and ensure that your program’s output is similar to the sample run output shown here. Because your program randomly chooses the determiners, nouns, verbs, and prepositions, your program will generate different sentences than the ones shown here.
    > python sentences.py
    One girl talked for the car.
    Some dogs drank above many rabbits.
    One bird drinks off one child.
    Some children laugh at many dogs.
    The child will run on the car.
    Some rabbits will talk about some cats.

Exceeding the Requirements

If your program fulfills the requirements for this assignment as described in the previous prove milestone and the Assignment section above, your program will earn 93% of the possible points. In order to earn the remaining 7% of points, you will need to add one or more features to your program so that it exceeds the requirements. Here are a few suggestions for additional features that you could add to your program if you wish.

Ponder

What changes would you have to make to your program so that it could produce sentences that fit the following form?

{Determiner} {adjective} {noun} {prepositional_phrase} {adverb} {verb} {determiner} {adjective} {noun} {prepositional_phrase}.

Such as these sentences:

The red birds in the air quickly ate some fast fish in the water.
The busy bird with a car sweetly drank many smart rabbits by one boy.
One dinky boy near the dog calmly grew some tall children across a cat.

How hard would it be to modify your program to pass the Turing test?

Submission

To submit your program, return to I‑Learn and do these two things:

  1. Upload your sentences.py file for feedback.
  2. Add a submission comment that specifies the grading category that best describes your program along with a one or two sentence justification for your choice. The grading criteria are:
    1. Some attempt made
    2. Developing but significantly deficient
    3. Slightly deficient
    4. Meets requirements
    5. Exceeds requirements