CS 111
Fall 2018

Problem Set 1 FAQ

If you don’t see your question here, post it on Piazza or come to office hours! See the links in the navigation bar for both of those options.

General questions

1. I get an error message that mentions a `TypeError` when I add something to a list. What should I do?

If you get something like the following error.

```TypeError: can only concatenate list (not "int") to list
```

you are likely trying to add an integer to a list.

Suppose you have two lists called `x` and `y`.

```x = [0, 1, 2]
y = [3, 4, 5]
```

And you would like to make a list that contains `[0, 1, 2, 3]`. You might try doing the following:

```x + y[0]
```

Unfortunately, this is not allowed in Python, because addition between a list and an integer is not defined. If you think about it, this makes sense: how would you add a list to an integer? Instead, recall that the `+` operator can be used to concatenate two lists. Knowing this, we can put `y[0]` inside its own list and concatenate that with the list `x`.

```x + [y[0]]
```
2. Do our functions need to have the exact names that you have specified in the assignment? What about the variables for the inputs?

Your functions must have the exact names that we have specified, or we won’t be able to test them. Note in particular that the case of the letters matters, and that some of the function names have one or more underscore characters (e.g., `larger_gap`).

For the variables specified for the inputs, you could in theory use different names, as long as they are still as descriptive as the original ones. However, when there are multiple inputs, you must keep the inputs in the same order that we specified in the assignment, or we won’t be able to test your function.

3. I read about or have used some Python functions we have not discussed in lecture. Can I use them in the homework?

No. You should solve the problems in the homework using only constructs that we have discussed in lecture or that you have seen in the textbook. In addition, some of the problems have specific instructions regarding which functions you should or should not use. There are, of course, many different ways to accomplish the homework assignments, but we construct the assignments so that you can solve them using the tools that we have learned about in class.

As a reminder, you are prohibited from consulting with external sites such as Stack Overflow about the homework assignments.

4. Do we need to use recursion on this assignment?

No. None of the functions that we’re asking you to write for this assignment require recursion. If you wrote one or more of them using recursion, that’s okay, too, but doing so is not required.

5. I think I’m done with the assignment. Are there any things I should check before I submit?

1. Be sure all of your functions return values instead of printing them.
2. Include a docstring in all of your functions.
3. Be sure to run your code after you add your docstrings to ensure that it still runs. If it doesn’t, you may have introduced problems involving the indentation of your docstrings.

Problem 4

1. I’m not sure exactly what I need to do when tracing function calls.

We covered a similar tracing problem in the video called Tracing Function Calls that can be found in the Blackboard folder for the first or second lecture from the week of September 17th.

We also did a similar problem in Task 3 of Lab 2, and we have posted our solutions for that exercise on the Labs page of the course website.

Problem 6

1. How do I start implementing `flipside`?

In the assignment, we hint that computing `len(s)//2` and storing it in a variable is the best way to start. What does this value represent? How can you use this value in conjunction with slicing to get the first and second halves of `s`?

2. What should `begins_with` return if the specified `suffix` is a substring of the specified `word`, but isn’t actually at the beginning of the word?

It should return `False`. The function should only return `True` if the specified `word` begins with the specified `suffix`. For example:

```>>> begins_with('compute', 'put')
False
>>> begins_with('compute', 'com')
True
```
3. How can I pad a string in Python?

Remember that you can concatenate strings with the ‘+’ operator just like you can concatenate lists. Therefore, if you have a variable called `pad` that represents the necessary padding, you can just concatenate it to the beginning of the string.

To create the necessary padding, recall that you can repeat a string by using the `*` operator. For example, if I wanted a string consisting of five `a`‘s, I could do the following:

```'a' * 5
```