Bob approaches fixes (#3201)
Final isShout and isQuestion remnants changed to is_shout and is_question. * Update introduction.md * Update snippet.txt * Update content.md * Update snippet.txt * Update content.md * Update snippet.txt * Update content.md * Update content.md * Update Benchmark.py * Update content.md
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
# Answer list
|
# Answer list
|
||||||
|
|
||||||
```python
|
```python
|
||||||
_ANSWERS = ['Whatever.', 'Sure.', 'Whoa, chill out!',
|
ANSWERS = ['Whatever.', 'Sure.', 'Whoa, chill out!',
|
||||||
"Calm down, I know what I'm doing!"]
|
"Calm down, I know what I'm doing!"]
|
||||||
|
|
||||||
|
|
||||||
@@ -9,9 +9,9 @@ def response(hey_bob):
|
|||||||
hey_bob = hey_bob.rstrip()
|
hey_bob = hey_bob.rstrip()
|
||||||
if not hey_bob:
|
if not hey_bob:
|
||||||
return 'Fine. Be that way!'
|
return 'Fine. Be that way!'
|
||||||
isShout = (2 if hey_bob.isupper() else 0)
|
is_shout = 2 if hey_bob.isupper() else 0
|
||||||
isQuestion = (1 if hey_bob.endswith('?') else 0)
|
is_question = 1 if hey_bob.endswith('?') else 0
|
||||||
return _ANSWERS[isShout + isQuestion]
|
return ANSWERS[is_shout + is_question]
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -19,11 +19,15 @@ In this approach you define a [list][list] that contains Bob’s answers, and ea
|
|||||||
The correct answer is selected from the list by using the score as the list index.
|
The correct answer is selected from the list by using the score as the list index.
|
||||||
|
|
||||||
Python doesn't _enforce_ having real constant values,
|
Python doesn't _enforce_ having real constant values,
|
||||||
but the `_ANSWERS` list is defined with all uppercase letters, which is the naming convention for a Python [constant][const].
|
but the `ANSWERS` list is defined with all uppercase letters, which is the naming convention for a Python [constant][const].
|
||||||
It indicates that the value is not intended to be changed.
|
It indicates that the value is not intended to be changed.
|
||||||
Python also does not have real [private][private] variables,
|
|
||||||
but a leading underscore is the naming convention for indicating that a variable is not meant to be part of the public API.
|
```exercism/note
|
||||||
It should be considered an implementation detail and subject to change without notice.
|
`ANSWERS` could prevent item reassignment by being defined as a [tuple](https://realpython.com/python-lists-tuples/#python-tuples) instead of a list.
|
||||||
|
The items in a tuple cannot be changed, and the performance between a tuple and a list here is equivalent.
|
||||||
|
The entire `ANSWERS` tuple could still be reassigned to another tuple,
|
||||||
|
so uppercase letters would still be used to indicate that the `ANSWERS` tuple should not be changed.
|
||||||
|
```
|
||||||
|
|
||||||
The [`rstrip`][rstrip] method is applied to the input to eliminate any whitespace at the end of the input.
|
The [`rstrip`][rstrip] method is applied to the input to eliminate any whitespace at the end of the input.
|
||||||
If the input has no characters left, it uses the [falsiness][falsiness] of an empty string with the [`not`][not] operator to return the response for saying nothing.
|
If the input has no characters left, it uses the [falsiness][falsiness] of an empty string with the [`not`][not] operator to return the response for saying nothing.
|
||||||
@@ -39,16 +43,16 @@ For example, `?` and `3` are not cased characters, as they do not change between
|
|||||||
`a` and `z` are cased characters, since their lowercase form changes to `A` and ` Z` when uppercase.
|
`a` and `z` are cased characters, since their lowercase form changes to `A` and ` Z` when uppercase.
|
||||||
```
|
```
|
||||||
|
|
||||||
If `isupper` is `True`, then `isShout` is given the value of `2`; otherwise, it is given the value of `0`.
|
If `isupper` is `True`, then `is_shout` is given the value of `2`; otherwise, it is given the value of `0`.
|
||||||
|
|
||||||
The [`endswith`][endswith] method is used to determine if the input ends with a question mark.
|
The [`endswith`][endswith] method is used to determine if the input ends with a question mark.
|
||||||
If the test for `endswith('?')` is `True`, then `isQuestion` is given the value of `1`; otherwise it is given the value of `0`.
|
If the test for `endswith('?')` is `True`, then `is_question` is given the value of `1`; otherwise it is given the value of `0`.
|
||||||
|
|
||||||
|
|
||||||
The response is selected from the list by the index like so
|
The response is selected from the list by the index like so
|
||||||
|
|
||||||
| isShout | isQuestion | Index | Answer |
|
| is_shout | is_question | Index | Answer |
|
||||||
| ------- | ---------- | --------- | ------------------------------------- |
|
| -------- | ----------- | --------- | ------------------------------------- |
|
||||||
| `false` | `false` | 0 + 0 = 0 | `"Whatever."` |
|
| `false` | `false` | 0 + 0 = 0 | `"Whatever."` |
|
||||||
| `false` | `true` | 0 + 1 = 1 | `"Sure."` |
|
| `false` | `true` | 0 + 1 = 1 | `"Sure."` |
|
||||||
| `true` | `false` | 2 + 0 = 2 | `"Whoa, chill out!"` |
|
| `true` | `false` | 2 + 0 = 2 | `"Whoa, chill out!"` |
|
||||||
@@ -57,7 +61,6 @@ The response is selected from the list by the index like so
|
|||||||
|
|
||||||
[list]: https://docs.python.org/3/library/stdtypes.html?highlight=list#list
|
[list]: https://docs.python.org/3/library/stdtypes.html?highlight=list#list
|
||||||
[const]: https://realpython.com/python-constants/
|
[const]: https://realpython.com/python-constants/
|
||||||
[private]: https://docs.python.org/3/tutorial/classes.html#private-variables
|
|
||||||
[rstrip]: https://docs.python.org/3/library/stdtypes.html?highlight=rstrip#str.rstrip
|
[rstrip]: https://docs.python.org/3/library/stdtypes.html?highlight=rstrip#str.rstrip
|
||||||
[falsiness]: https://www.pythontutorial.net/python-basics/python-boolean/
|
[falsiness]: https://www.pythontutorial.net/python-basics/python-boolean/
|
||||||
[not]: https://docs.python.org/3/reference/expressions.html#not
|
[not]: https://docs.python.org/3/reference/expressions.html#not
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
_ANSWERS = ['Whatever.', 'Sure.', 'Whoa, chill out!',
|
ANSWERS = ['Whatever.', 'Sure.', 'Whoa, chill out!',
|
||||||
"Calm down, I know what I'm doing!"]
|
"Calm down, I know what I'm doing!"]
|
||||||
# code snipped
|
# code snipped
|
||||||
isShout = (2 if hey_bob.isupper() else 0)
|
is_shout = 2 if hey_bob.isupper() else 0
|
||||||
isQuestion = (1 if hey_bob.endswith('?') else 0)
|
is_question = 1 if hey_bob.endswith('?') else 0
|
||||||
return _ANSWERS[isShout + isQuestion]
|
return ANSWERS[is_shout + is_question]
|
||||||
|
|||||||
@@ -5,14 +5,14 @@ def response(hey_bob):
|
|||||||
hey_bob = hey_bob.rstrip()
|
hey_bob = hey_bob.rstrip()
|
||||||
if not hey_bob:
|
if not hey_bob:
|
||||||
return 'Fine. Be that way!'
|
return 'Fine. Be that way!'
|
||||||
isShout = hey_bob.isupper()
|
is_shout = hey_bob.isupper()
|
||||||
isQuestion = hey_bob.endswith('?')
|
is_question = hey_bob.endswith('?')
|
||||||
if isShout:
|
if is_shout:
|
||||||
if isQuestion:
|
if is_question:
|
||||||
return "Calm down, I know what I'm doing!"
|
return "Calm down, I know what I'm doing!"
|
||||||
else:
|
else:
|
||||||
return 'Whoa, chill out!'
|
return 'Whoa, chill out!'
|
||||||
if isQuestion:
|
if is_question:
|
||||||
return 'Sure.'
|
return 'Sure.'
|
||||||
return 'Whatever.'
|
return 'Whatever.'
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
if isShout:
|
if is_shout:
|
||||||
if isQuestion:
|
if is_question:
|
||||||
return "Calm down, I know what I'm doing!"
|
return "Calm down, I know what I'm doing!"
|
||||||
else:
|
else:
|
||||||
return 'Whoa, chill out!'
|
return 'Whoa, chill out!'
|
||||||
if isQuestion:
|
if is_question:
|
||||||
return 'Sure.'
|
return 'Sure.'
|
||||||
return 'Whatever.'
|
return 'Whatever.'
|
||||||
|
|||||||
@@ -5,13 +5,13 @@ def response(hey_bob):
|
|||||||
hey_bob = hey_bob.rstrip()
|
hey_bob = hey_bob.rstrip()
|
||||||
if not hey_bob:
|
if not hey_bob:
|
||||||
return 'Fine. Be that way!'
|
return 'Fine. Be that way!'
|
||||||
isShout = hey_bob.isupper()
|
is_shout = hey_bob.isupper()
|
||||||
isQuestion = hey_bob.endswith('?')
|
is_question = hey_bob.endswith('?')
|
||||||
if isShout and isQuestion:
|
if is_shout and is_question:
|
||||||
return "Calm down, I know what I'm doing!"
|
return "Calm down, I know what I'm doing!"
|
||||||
if isShout:
|
if is_shout:
|
||||||
return 'Whoa, chill out!'
|
return 'Whoa, chill out!'
|
||||||
if isQuestion:
|
if is_question:
|
||||||
return 'Sure.'
|
return 'Sure.'
|
||||||
return 'Whatever.'
|
return 'Whatever.'
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
if isShout and isQuestion:
|
if is_shout and is_question:
|
||||||
return "Calm down, I know what I'm doing!"
|
return "Calm down, I know what I'm doing!"
|
||||||
if isShout:
|
if is_shout:
|
||||||
return 'Whoa, chill out!'
|
return 'Whoa, chill out!'
|
||||||
if isQuestion:
|
if is_question:
|
||||||
return 'Sure.'
|
return 'Sure.'
|
||||||
return 'Whatever.'
|
return 'Whatever.'
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ Regardless of the approach used, some things you could look out for include
|
|||||||
Combine the two determinations instead of copying them.
|
Combine the two determinations instead of copying them.
|
||||||
Not duplicating the code will keep the code [DRY][dry].
|
Not duplicating the code will keep the code [DRY][dry].
|
||||||
|
|
||||||
- Perhaps consider making `IsQuestion` and `IsShout` values set once instead of functions that are possibly called twice.
|
- Perhaps consider making `is_question` and `is_shout` values set once instead of functions that are possibly called twice.
|
||||||
|
|
||||||
- If an `if` statement can return, then an `elif` or `else` is not needed.
|
- If an `if` statement can return, then an `elif` or `else` is not needed.
|
||||||
Execution will either return or will continue to the next statement anyway.
|
Execution will either return or will continue to the next statement anyway.
|
||||||
@@ -29,13 +29,13 @@ def response(hey_bob):
|
|||||||
hey_bob = hey_bob.rstrip()
|
hey_bob = hey_bob.rstrip()
|
||||||
if not hey_bob:
|
if not hey_bob:
|
||||||
return 'Fine. Be that way!'
|
return 'Fine. Be that way!'
|
||||||
isShout = hey_bob.isupper()
|
is_shout = hey_bob.isupper()
|
||||||
isQuestion = hey_bob.endswith('?')
|
is_question = hey_bob.endswith('?')
|
||||||
if isShout and isQuestion:
|
if is_shout and is_question:
|
||||||
return "Calm down, I know what I'm doing!"
|
return "Calm down, I know what I'm doing!"
|
||||||
if isShout:
|
if is_shout:
|
||||||
return 'Whoa, chill out!'
|
return 'Whoa, chill out!'
|
||||||
if isQuestion:
|
if is_question:
|
||||||
return 'Sure.'
|
return 'Sure.'
|
||||||
return 'Whatever.'
|
return 'Whatever.'
|
||||||
|
|
||||||
@@ -50,14 +50,14 @@ def response(hey_bob):
|
|||||||
hey_bob = hey_bob.rstrip()
|
hey_bob = hey_bob.rstrip()
|
||||||
if not hey_bob:
|
if not hey_bob:
|
||||||
return 'Fine. Be that way!'
|
return 'Fine. Be that way!'
|
||||||
isShout = hey_bob.isupper()
|
is_shout = hey_bob.isupper()
|
||||||
isQuestion = hey_bob.endswith('?')
|
is_question = hey_bob.endswith('?')
|
||||||
if isShout:
|
if is_shout:
|
||||||
if isQuestion:
|
if is_question:
|
||||||
return "Calm down, I know what I'm doing!"
|
return "Calm down, I know what I'm doing!"
|
||||||
else:
|
else:
|
||||||
return 'Whoa, chill out!'
|
return 'Whoa, chill out!'
|
||||||
if isQuestion:
|
if is_question:
|
||||||
return 'Sure.'
|
return 'Sure.'
|
||||||
return 'Whatever.'
|
return 'Whatever.'
|
||||||
|
|
||||||
|
|||||||
@@ -8,13 +8,13 @@ def response(hey_bob):
|
|||||||
hey_bob = hey_bob.rstrip()
|
hey_bob = hey_bob.rstrip()
|
||||||
if not hey_bob:
|
if not hey_bob:
|
||||||
return 'Fine. Be that way!'
|
return 'Fine. Be that way!'
|
||||||
isShout = hey_bob.isupper()
|
is_shout = hey_bob.isupper()
|
||||||
isQuestion = hey_bob.endswith('?')
|
is_question = hey_bob.endswith('?')
|
||||||
if isShout and isQuestion:
|
if is_shout and is_question:
|
||||||
return "Calm down, I know what I'm doing!"
|
return "Calm down, I know what I'm doing!"
|
||||||
if isShout:
|
if is_shout:
|
||||||
return 'Whoa, chill out!'
|
return 'Whoa, chill out!'
|
||||||
if isQuestion:
|
if is_question:
|
||||||
return 'Sure.'
|
return 'Sure.'
|
||||||
return 'Whatever.'
|
return 'Whatever.'
|
||||||
|
|
||||||
@@ -29,14 +29,14 @@ def response(hey_bob):
|
|||||||
hey_bob = hey_bob.rstrip()
|
hey_bob = hey_bob.rstrip()
|
||||||
if not hey_bob:
|
if not hey_bob:
|
||||||
return 'Fine. Be that way!'
|
return 'Fine. Be that way!'
|
||||||
isShout = hey_bob.isupper()
|
is_shout = hey_bob.isupper()
|
||||||
isQuestion = hey_bob.endswith('?')
|
is_question = hey_bob.endswith('?')
|
||||||
if isShout:
|
if is_shout:
|
||||||
if isQuestion:
|
if is_question:
|
||||||
return "Calm down, I know what I'm doing!"
|
return "Calm down, I know what I'm doing!"
|
||||||
else:
|
else:
|
||||||
return 'Whoa, chill out!'
|
return 'Whoa, chill out!'
|
||||||
if isQuestion:
|
if is_question:
|
||||||
return 'Sure.'
|
return 'Sure.'
|
||||||
return 'Whatever.'
|
return 'Whatever.'
|
||||||
|
|
||||||
@@ -47,14 +47,17 @@ print(f"if statements nested: {val}")
|
|||||||
val = timeit.timeit("""response("I really don't have anything to say.")""",
|
val = timeit.timeit("""response("I really don't have anything to say.")""",
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_ANSWERS = ["Whatever.", "Sure.", "Whoa, chill out!", "Calm down, I know what I'm doing!"]
|
ANSWERS = ['Whatever.', 'Sure.', 'Whoa, chill out!',
|
||||||
|
"Calm down, I know what I'm doing!"]
|
||||||
|
|
||||||
|
|
||||||
def response(hey_bob):
|
def response(hey_bob):
|
||||||
hey_bob = hey_bob.rstrip()
|
hey_bob = hey_bob.rstrip()
|
||||||
if not hey_bob: return 'Fine. Be that way!'
|
if not hey_bob:
|
||||||
isShout = 2 if hey_bob.isupper() else 0
|
return 'Fine. Be that way!'
|
||||||
isQuestion = 1 if hey_bob.endswith('?') else 0
|
is_shout = 2 if hey_bob.isupper() else 0
|
||||||
return _ANSWERS[isShout + isQuestion]
|
is_question = 1 if hey_bob.endswith('?') else 0
|
||||||
|
return ANSWERS[is_shout + is_question]
|
||||||
|
|
||||||
|
|
||||||
""", number=loops) / loops
|
""", number=loops) / loops
|
||||||
|
|||||||
Reference in New Issue
Block a user