From 0f51653849d7ec920c3c9e0d0e5e887f4f33a173 Mon Sep 17 00:00:00 2001 From: Alex Hall Date: Sat, 13 Apr 2024 20:08:03 +0200 Subject: [PATCH] Chinese translation preview --- core/translation.py | 10 +- tests/golden_files/zh/test_transcript.json | 1708 +++++++++-------- .../locales/zh/LC_MESSAGES/futurecoder.mo | Bin 103009 -> 134237 bytes 3 files changed, 868 insertions(+), 850 deletions(-) diff --git a/core/translation.py b/core/translation.py index bda360e0..7bd9b23e 100644 --- a/core/translation.py +++ b/core/translation.py @@ -57,11 +57,11 @@ def get(msgid, default): result = translation.gettext(msgid) if result == msgid: - assert ( - msgid.startswith(("code_bits.")) - or "output_prediction_choices" in msgid - or ".disallowed." in msgid - ) + # assert ( + # msgid.startswith(("code_bits.")) + # or "output_prediction_choices" in msgid + # or ".disallowed." in msgid + # ) return default if os.environ.get("CHECK_INLINE_CODES"): diff --git a/tests/golden_files/zh/test_transcript.json b/tests/golden_files/zh/test_transcript.json index e032ca5d..99bb3e87 100644 --- a/tests/golden_files/zh/test_transcript.json +++ b/tests/golden_files/zh/test_transcript.json @@ -17,12 +17,12 @@ "step": "first_expression" }, { + "get_solution": "program", "page": "Introducing The Shell", "program": [ "1+2" ], "response": { - "message": "", "passed": true, "result": [ { @@ -43,7 +43,8 @@ "passed": false, "result": [ { - "text": " 3 x 4\n ^\nSyntaxError: invalid syntax\nat line 1\n\nA `SyntaxError` occurs when Python cannot understand your code.\n\nCurrently, I cannot guess the likely cause of this error.\nTry to examine closely the line indicated as well as the line\nimmediately above to see if you can identify some misspelled\nword, or missing symbols, like (, ), [, ], :, etc.\n\nUnless your code uses type annotations, which are beyond our scope,\nif you think that this is something which should be handled\nby friendly, please report this case to\nhttps://github.com/aroberge/friendly/issues\n\n\n\n", + "friendly": "

A SyntaxError occurs when Python cannot understand your code.

\n

Currently, I cannot guess the likely cause of this error.\nTry to examine closely the line indicated as well as the line\nimmediately above to see if you can identify some misspelled\nword, or missing symbols, like (, ), [, ], :, etc.

\n

Unless your code uses type annotations, which are beyond our scope,\nif you think that this is something which should be handled\nby friendly, please report this case to\nhttps://github.com/friendly-traceback/friendly-traceback/issues

", + "text": " 3 x 4\n ^\nSyntaxError: invalid syntax\nat line 1\n", "type": "syntax_error" } ] @@ -51,12 +52,12 @@ "step": "more_calculation" }, { + "get_solution": "program", "page": "Introducing The Shell", "program": [ "5 - 6" ], "response": { - "message": "", "passed": true, "result": [ { @@ -68,12 +69,12 @@ "step": "more_calculation" }, { + "get_solution": "program", "page": "Introducing Strings", "program": [ "'hello'" ], "response": { - "message": "", "passed": true, "result": [ { @@ -85,12 +86,12 @@ "step": "hello_string" }, { - "page": "Adding Strings", + "get_solution": "program", + "page": "\u5b57\u7b26\u4e32\u52a0\u6cd5", "program": [ "'hello' + 'world'" ], "response": { - "message": "", "passed": true, "result": [ { @@ -102,12 +103,12 @@ "step": "hello_world_concat" }, { - "page": "Adding Strings", + "page": "\u5b57\u7b26\u4e32\u52a0\u6cd5", "program": [ "'hello world'" ], "response": { - "message": "

You must still add two or more strings together.

", + "message": "

\u4f60\u9700\u8981\u628a\u4e24\u4e2a\u6216\u8005\u591a\u4e2a\u5b57\u7b26\u4e32\u52a0\u8d77\u6765\uff0c\u800c\u4e0d\u662f\u53ea\u6709\u4e00\u4e2a\u3002

", "passed": false, "result": [ { @@ -119,15 +120,12 @@ "step": "hello_world_space" }, { - "get_solution": [ - "'hello ' + 'world'" - ], - "page": "Adding Strings", + "get_solution": "program", + "page": "\u5b57\u7b26\u4e32\u52a0\u6cd5", "program": [ "'hello ' + 'world'" ], "response": { - "message": "", "passed": true, "result": [ { @@ -139,12 +137,12 @@ "step": "hello_world_space" }, { + "get_solution": "program", "page": "Introducing Variables", "program": [ "word = 'Hello'" ], "response": { - "message": "", "passed": true, "result": [] }, @@ -163,12 +161,12 @@ "step": "word_check" }, { + "get_solution": "program", "page": "Introducing Variables", "program": [ "word" ], "response": { - "message": "", "passed": true, "result": [ { @@ -180,12 +178,12 @@ "step": "word_check" }, { + "get_solution": "program", "page": "Introducing Variables", "program": [ "'word'" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "'word'", @@ -194,7 +192,7 @@ "'word'", "Hello", "'Hello'", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -207,21 +205,21 @@ "step": "word_string_check" }, { + "get_solution": "program", "page": "Introducing Variables", "program": [ "sunshine" ], "response": { - "message": "", "passed": true, "prediction": { - "answer": "Error", + "answer": "\u9519\u8bef", "choices": [ "sunshine", "'sunshine'", "Hello", "'Hello'", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -235,11 +233,13 @@ }, "frames": [ { + "filename": "/my_program.py", + "lineno": 1, "lines": [ { - "content": "sunshine", "is_current": true, "lineno": 1, + "text": "sunshine", "type": "line" } ], @@ -254,7 +254,7 @@ ], "text": [ "Traceback (most recent call last):", - " File \"my_program.py\", line 1, in ", + " File \"/my_program.py\", line 1, in ", "--> 1 | sunshine", " ^^^^^^^^", "", @@ -267,7 +267,7 @@ "step": "sunshine_undefined_check" }, { - "page": "Using Variables and print()", + "page": "\u4f7f\u7528\u53d8\u91cf\u548c print()", "program": [ "foo = 3" ], @@ -279,19 +279,19 @@ "step": "name_assign" }, { - "page": "Using Variables and print()", + "page": "\u4f7f\u7528\u53d8\u91cf\u548c print()", "program": [ "your_name = ''" ], "response": { - "message": "

For this exercise, choose a non-empty string

", + "message": "

\u5728\u8fd9\u4e2a\u7ec3\u4e60\u4e2d\uff0c\u9009\u62e9\u4e00\u4e2a\u975e\u7a7a\u7684\u5b57\u7b26\u4e32

", "passed": false, "result": [] }, "step": "name_assign" }, { - "page": "Using Variables and print()", + "page": "\u4f7f\u7528\u53d8\u91cf\u548c print()", "program": [ "your_name = 3" ], @@ -303,36 +303,36 @@ "step": "name_assign" }, { - "page": "Using Variables and print()", + "page": "\u4f7f\u7528\u53d8\u91cf\u548c print()", "program": [ "your_name = ' Alex'" ], "response": { - "message": "

For this exercise, choose a name that doesn't start with a space.

", + "message": "

\u5728\u8fd9\u4e2a\u7ec3\u4e60\u4e2d\uff0c\u9009\u62e9\u4e00\u4e2a\u4e0d\u4ee5\u7a7a\u683c\u5f00\u5934\u7684\u540d\u5b57\u3002

", "passed": false, "result": [] }, "step": "name_assign" }, { - "page": "Using Variables and print()", + "get_solution": "program", + "page": "\u4f7f\u7528\u53d8\u91cf\u548c print()", "program": [ "your_name = 'Alex'" ], "response": { - "message": "", "passed": true, "result": [] }, "step": "name_assign" }, { - "page": "Using Variables and print()", + "get_solution": "program", + "page": "\u4f7f\u7528\u53d8\u91cf\u548c print()", "program": [ "'Hello ' + your_name" ], "response": { - "message": "", "passed": true, "result": [ { @@ -344,24 +344,24 @@ "step": "hello_plus_name" }, { - "page": "Using Variables and print()", + "page": "\u4f7f\u7528\u53d8\u91cf\u548c print()", "program": [ "word = 2" ], "response": { - "message": "

Oops, you need to set word = 'Hello' before we can continue.

", + "message": "

\u54ce\u5440\uff0c\u5728\u6211\u4eec\u7ee7\u7eed\u4e4b\u524d\uff0c\u4f60\u9700\u8981\u8bbe\u7f6e word = 'Hello'\u3002

", "passed": false, "result": [] }, "step": "word_plus_name" }, { - "page": "Using Variables and print()", + "get_solution": "program", + "page": "\u4f7f\u7528\u53d8\u91cf\u548c print()", "program": [ "word + your_name" ], "response": { - "message": "", "passed": true, "result": [ { @@ -373,27 +373,24 @@ "step": "word_plus_name" }, { - "page": "Using Variables and print()", + "page": "\u4f7f\u7528\u53d8\u91cf\u548c print()", "program": [ "word = 2" ], "response": { - "message": "

Oops, you need to set word = 'Hello' before we can continue.

", + "message": "

\u54ce\u5440\uff0c\u5728\u6211\u4eec\u7ee7\u7eed\u4e4b\u524d\uff0c\u4f60\u9700\u8981\u8bbe\u7f6e word = 'Hello'\u3002

", "passed": false, "result": [] }, "step": "word_plus_name_with_space" }, { - "get_solution": [ - "word + ' ' + your_name" - ], - "page": "Using Variables and print()", + "get_solution": "program", + "page": "\u4f7f\u7528\u53d8\u91cf\u548c print()", "program": [ "word + ' ' + your_name" ], "response": { - "message": "", "passed": true, "result": [ { @@ -405,24 +402,24 @@ "step": "word_plus_name_with_space" }, { - "page": "Using Variables and print()", + "get_solution": "program", + "page": "\u4f7f\u7528\u53d8\u91cf\u548c print()", "program": [ "word = 'Goodbye'" ], "response": { - "message": "", "passed": true, "result": [] }, "step": "word_assign_goodbye" }, { - "page": "Using Variables and print()", + "get_solution": "program", + "page": "\u4f7f\u7528\u53d8\u91cf\u548c print()", "program": [ "word + ' ' + your_name" ], "response": { - "message": "", "passed": true, "result": [ { @@ -434,12 +431,12 @@ "step": "goodbye_plus_name" }, { - "page": "Using Variables and print()", + "get_solution": "program", + "page": "\u4f7f\u7528\u53d8\u91cf\u548c print()", "program": [ "print(word + ' ' + your_name)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -451,7 +448,8 @@ "step": "first_print" }, { - "page": "Writing Programs", + "get_solution": "program", + "page": "\u7f16\u5199\u7a0b\u5e8f", "program": [ "word = 'Hello'", "name = 'World'", @@ -460,7 +458,6 @@ "print(word + ' ' + name)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -472,6 +469,7 @@ "step": "editor_hello_world" }, { + "get_solution": "program", "page": "Storing Calculations In Variables", "program": [ "word = 'Hello'", @@ -480,7 +478,6 @@ "print(sentence)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "Hello World", @@ -491,7 +488,7 @@ "'Hello' + ' ' + 'World'", "Hello World", "'Hello World'", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -504,6 +501,7 @@ "step": "sentence_equals_word_plus_name" }, { + "get_solution": "program", "page": "Storing Calculations In Variables", "program": [ "word = 'Hello'", @@ -514,7 +512,6 @@ "print(sentence)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "Hello World\nHello World", @@ -522,7 +519,7 @@ "Hello World\nHello World", "Hello World\nGoodbye World", "Goodbye World\nGoodbye World", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -535,13 +532,13 @@ "step": "sentence_doesnt_change" }, { + "get_solution": "program", "page": "Introducing For Loops", "program": [ "name = 'World'", "for character in name: print(character)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -553,17 +550,18 @@ "step": "first_for_loop" }, { + "get_solution": "program", "page": "Indentation", "program": [ "for character in name:", "print(character)" ], "response": { - "message": "", "passed": true, "result": [ { - "text": " print(character)\n ^\nIndentationError: expected an indented block\nat line 2\n\nAn `IndentationError` occurs when a given line of code is\nnot indented (aligned vertically with other lines) as expected.\n\nLine `2` identified above was expected to begin a new indented block.\n\n\n", + "friendly": "

An IndentationError occurs when a given line of code is\nnot indented (aligned vertically with other lines) as expected.

\n

Line 2 identified above was expected to begin a new indented block.

", + "text": " print(character)\n ^^^^^\nIndentationError: expected an indented block after 'for' statement on line 1\nat line 2\n", "type": "syntax_error" } ] @@ -571,6 +569,7 @@ "step": "missing_indentation" }, { + "get_solution": "program", "page": "Indentation", "program": [ "name = 'World'", @@ -580,7 +579,6 @@ " print('---')" ], "response": { - "message": "", "passed": true, "result": [ { @@ -592,6 +590,7 @@ "step": "two_indented_lines" }, { + "get_solution": "program", "page": "Indentation", "program": [ "name = 'World'", @@ -601,7 +600,6 @@ "print('---')" ], "response": { - "message": "", "passed": true, "result": [ { @@ -613,6 +611,7 @@ "step": "one_indented_line" }, { + "get_solution": "program", "page": "Indentation", "program": [ "for character in name:", @@ -620,11 +619,11 @@ " print('---')" ], "response": { - "message": "", "passed": true, "result": [ { - "text": " print('---')\n ^\nIndentationError: unindent does not match any outer indentation level\nat line 3\n\nAn `IndentationError` occurs when a given line of code is\nnot indented (aligned vertically with other lines) as expected.\n\nLine `3` identified above is less indented than expected.\n\n\n", + "friendly": "

An IndentationError occurs when a given line of code is\nnot indented (aligned vertically with other lines) as expected.

\n

Line 3 identified above is less indented than expected.

", + "text": " print('---')\n ^\nIndentationError: unindent does not match any outer indentation level\nat line 3\n", "type": "syntax_error" } ] @@ -636,14 +635,13 @@ "for character in name:", " print('---' + character)" ], - "page": "Basic For Loop Exercises", + "page": "for \u5faa\u73af\u7684\u57fa\u7840\u7ec3\u4e60", "program": [ "name = 'World'", "for character in name:", " print('---' + character)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -659,14 +657,13 @@ "for _ in name:", " print(name)" ], - "page": "Basic For Loop Exercises", + "page": "for \u5faa\u73af\u7684\u57fa\u7840\u7ec3\u4e60", "program": [ "name = 'World'", "for _ in name:", " print(name)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -678,7 +675,8 @@ "step": "loop_exercise_2" }, { - "page": "Building Up Strings", + "get_solution": "program", + "page": "\u6784\u5efa\u5b57\u7b26\u4e32", "program": [ "hello = 'Hello'", "print(hello)", @@ -686,7 +684,6 @@ "print(hello)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "Hello\nHello!", @@ -694,7 +691,7 @@ "Hello\nHello", "Hello\nHello!", "Hello!\nHello!", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -707,7 +704,8 @@ "step": "hello_plus_equals" }, { - "page": "Building Up Strings", + "get_solution": "program", + "page": "\u6784\u5efa\u5b57\u7b26\u4e32", "program": [ "name = 'World'", "line = '-'", @@ -716,7 +714,6 @@ " print(line)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "-W\n-Wo\n-Wor\n-Worl\n-World", @@ -729,7 +726,7 @@ "-World\n-Worl\n-Wor\n-Wo\n-W", "-World\n-World\n-World\n-World\n-World", "-World\n--World\n---World\n----World\n-----World", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -742,7 +739,8 @@ "step": "name_triangle" }, { - "page": "Building Up Strings", + "get_solution": "program", + "page": "\u6784\u5efa\u5b57\u7b26\u4e32", "program": [ "name = 'World'", "line = '-'", @@ -751,7 +749,6 @@ " line = line + char" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "-\n-W\n-Wo\n-Wor\n-Worl", @@ -759,7 +756,7 @@ "-W\n-Wo\n-Wor\n-Worl\n-World", "-Wo\n-Wor\n-Worl\n-World", "-\n-W\n-Wo\n-Wor\n-Worl", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -772,12 +769,12 @@ "step": "name_triangle_missing_last_line" }, { - "page": "Building Up Strings", + "get_solution": "program", + "page": "\u6784\u5efa\u5b57\u7b26\u4e32", "program": [ "'' + '' + ''" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "''", @@ -791,7 +788,7 @@ "'' '' ''", "' '' '' '", "++", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -810,7 +807,7 @@ " line = line + char", " print(line)" ], - "page": "Building Up Strings", + "page": "\u6784\u5efa\u5b57\u7b26\u4e32", "program": [ "name = 'World'", "line = ''", @@ -819,7 +816,6 @@ " print(line)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -837,7 +833,7 @@ " line = line + char + ' '", " print(line)" ], - "page": "Building Up Strings Exercises", + "page": "\u6784\u5efa\u5b57\u7b26\u4e32 \u7ec3\u4e60", "program": [ "name = 'World'", "line = ''", @@ -846,7 +842,6 @@ " print(line)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -864,7 +859,7 @@ " line = char + line", " print(line)" ], - "page": "Building Up Strings Exercises", + "page": "\u6784\u5efa\u5b57\u7b26\u4e32 \u7ec3\u4e60", "program": [ "name = 'World'", "line = ''", @@ -873,7 +868,6 @@ " print(line)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -892,7 +886,7 @@ "print(name)", "print(line)" ], - "page": "Building Up Strings Exercises", + "page": "\u6784\u5efa\u5b57\u7b26\u4e32 \u7ec3\u4e60", "program": [ "name = 'World'", "line = ''", @@ -902,7 +896,6 @@ "print(line)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -923,7 +916,7 @@ "print('|' + name + '|')", "print(line)" ], - "page": "Building Up Strings Exercises", + "page": "\u6784\u5efa\u5b57\u7b26\u4e32 \u7ec3\u4e60", "program": [ "name = 'World'", "line = ''", @@ -935,7 +928,6 @@ "print(line)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -958,7 +950,7 @@ " print(char + spaces + char)", "print(line)" ], - "page": "Building Up Strings Exercises", + "page": "\u6784\u5efa\u5b57\u7b26\u4e32 \u7ec3\u4e60", "program": [ "name = 'World'", "line = '+' + name + '+'", @@ -972,7 +964,6 @@ "print(line)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -984,7 +975,7 @@ "step": "name_box_2" }, { - "page": "Building Up Strings Exercises", + "page": "\u6784\u5efa\u5b57\u7b26\u4e32 \u7ec3\u4e60", "program": [ "name = 'World'", "spaces = ''", @@ -993,7 +984,7 @@ " print(spaces + char)" ], "response": { - "message": "

Almost there! You have one space too many before each letter.\nMake sure that the first time your loop calls print\nyour variable which will contain the spaces is an empty string.\nCheck the order of your code.

", + "message": "

\u8fd8\u5dee\u4e00\u70b9\u70b9\uff01\u6bcf\u4e2a\u5b57\u6bcd\u524d\u9762\u90fd\u591a\u4e86\u4e00\u4e2a\u7a7a\u683c\u3002\n\u5728\u5faa\u73af\u4e2d\u7b2c\u4e00\u6b21\u8c03\u7528 print \u65f6\uff0c\u786e\u4fdd\u8bb0\u5f55\u7a7a\u683c\u7684\u53d8\u91cf\u662f\u4e00\u4e2a\u7a7a\u7684\u5b57\u7b26\u4e32\u3002\n\u68c0\u67e5\u4f60\u7684\u4ee3\u7801\u4e2d\u8bed\u53e5\u7684\u987a\u5e8f\u3002

", "passed": false, "result": [ { @@ -1011,7 +1002,7 @@ " print(spaces + char)", " spaces += ' '" ], - "page": "Building Up Strings Exercises", + "page": "\u6784\u5efa\u5b57\u7b26\u4e32 \u7ec3\u4e60", "program": [ "name = 'World'", "spaces = ''", @@ -1020,7 +1011,6 @@ " spaces += ' '" ], "response": { - "message": "", "passed": true, "result": [ { @@ -1032,6 +1022,7 @@ "step": "diagonal_name_bonus_challenge" }, { + "get_solution": "program", "page": "Introducing If Statements", "program": [ "condition = True", @@ -1040,7 +1031,6 @@ "print(condition)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -1052,6 +1042,7 @@ "step": "introducing_booleans" }, { + "get_solution": "program", "page": "Introducing If Statements", "program": [ "if True:", @@ -1061,7 +1052,6 @@ " print('This does not')" ], "response": { - "message": "", "passed": true, "result": [ { @@ -1073,6 +1063,7 @@ "step": "first_if_statements" }, { + "get_solution": "program", "page": "Introducing If Statements", "program": [ "sentence = 'Hello World'", @@ -1082,14 +1073,13 @@ "print(sentence)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "Hello World!", "choices": [ "Hello World", "Hello World!", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -1102,6 +1092,7 @@ "step": "excited_example" }, { + "get_solution": "program", "page": "Introducing If Statements", "program": [ "sentence = 'Hello World'", @@ -1111,14 +1102,13 @@ "print(sentence)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "Hello World", "choices": [ "Hello World", "Hello World!", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -1150,7 +1140,6 @@ "print(sentence)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -1162,6 +1151,7 @@ "step": "excited_confused_exercise" }, { + "get_solution": "program", "page": "Combining Compound Statements", "program": [ "sentence = 'Hello World'", @@ -1176,7 +1166,6 @@ "print(sentence)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "H!e!l!l!o! !W!o!r!l!d!", @@ -1190,7 +1179,7 @@ "!Hello World!", "H!e!l!l!o! !W!o!r!l!d!", "!H!e!l!l!o! !W!o!r!l!d", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -1203,6 +1192,7 @@ "step": "for_inside_if" }, { + "get_solution": "program", "page": "Understanding Programs With snoop", "program": [ "sentence = 'Hello World'", @@ -1217,7 +1207,6 @@ "print(new_sentence)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "ello World", @@ -1227,7 +1216,7 @@ "Hello Worl", "H", "d", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -1240,6 +1229,7 @@ "step": "print_tail" }, { + "get_solution": "program", "page": "Understanding Programs With snoop", "program": [ "sentence = 'Hello World'", @@ -1254,208 +1244,43 @@ "print(new_sentence)" ], "response": { - "message": "", "passed": true, "result": [ { - "text": "", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 1\u001b[0m | sentence \u001b[38;5;197m=\u001b[39m \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mHello World\u001b[39m\u001b[38;5;186m'\u001b[39m\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 3\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mFalse\u001b[39m\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 4\u001b[0m | new_sentence \u001b[38;5;197m=\u001b[39m \u001b[38;5;186m'\u001b[39m\u001b[38;5;186m'\u001b[39m\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mH\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186me\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186me\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186ml\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mel\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mell\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mo\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mello\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186m \u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mello \u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mW\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mello W\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mo\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mello Wo\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mr\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mello Wor\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186ml\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n", - "type": "stdout" + "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 1\u001b[0m | sentence \u001b[38;5;197m=\u001b[39m \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mHello World\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 3\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mFalse\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 4\u001b[0m | new_sentence \u001b[38;5;197m=\u001b[39m \u001b[38;5;186m'\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mH\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186me\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186me\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n", + "type": "snoop" }, { - "text": "\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mello Worl\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n", - "type": "stdout" + "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186ml\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mel\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mell\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n", + "type": "snoop" }, { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n", - "type": "stdout" + "text": "\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mo\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mello\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186m \u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mello \u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n", + "type": "snoop" }, { - "text": "\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186md\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n", - "type": "stdout" + "text": "\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mW\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mello W\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mo\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mello Wo\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n", + "type": "snoop" }, { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n", - "type": "stdout" + "text": "\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mr\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mello Wor\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186ml\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mello Worl\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n", + "type": "snoop" }, { - "text": "\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mello World\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n", - "type": "stdout" + "text": "\u001b[38;5;242m \u001b[0m...... char = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186md\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | \u001b[38;5;81mif\u001b[39m include:\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 7\u001b[0m | new_sentence \u001b[38;5;197m+\u001b[39m\u001b[38;5;197m=\u001b[39m char\n\u001b[38;5;242m \u001b[0m.............. new_sentence = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mello World\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | include \u001b[38;5;197m=\u001b[39m \u001b[38;5;81mTrue\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 10\u001b[0m | print(new_sentence)\n", + "type": "snoop" }, { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mfor\u001b[39m char \u001b[38;5;197min\u001b[39m sentence:\n", + "text": "ello World", "type": "stdout" }, { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 10\u001b[0m | print(new_sentence)\n", + "text": "\n", "type": "stdout" }, { - "text": "ello World\n", - "type": "stdout" + "text": "", + "type": "snoop" } ] }, @@ -1485,7 +1310,6 @@ "print(new_sentence)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -1497,6 +1321,7 @@ "step": "print_first_character" }, { + "get_solution": "program", "page": "if and else", "program": [ "condition = True", @@ -1506,7 +1331,6 @@ " print('No')" ], "response": { - "message": "", "passed": true, "result": [ { @@ -1518,6 +1342,7 @@ "step": "first_if_else" }, { + "get_solution": "program", "page": "if and else", "program": [ "condition = False", @@ -1527,7 +1352,6 @@ " print('No')" ], "response": { - "message": "", "passed": true, "result": [ { @@ -1539,6 +1363,7 @@ "step": "first_if_else_false" }, { + "get_solution": "program", "page": "if and else", "program": [ "sentence = 'Hello World'", @@ -1550,7 +1375,6 @@ "print(sentence)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -1562,6 +1386,7 @@ "step": "if_upper_else_lower" }, { + "get_solution": "program", "page": "if and else", "program": [ "sentence = 'Hello World'", @@ -1573,7 +1398,6 @@ "print(sentence)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -1585,6 +1409,7 @@ "step": "if_upper_else_lower_false" }, { + "get_solution": "program", "page": "if and else", "program": [ "sentence = 'Hello World'", @@ -1597,14 +1422,13 @@ "print(sentence)" ], "response": { - "message": "", "passed": true, "prediction": { - "answer": "Error", + "answer": "\u9519\u8bef", "choices": [ "Hello World", "Hello World!", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -1620,11 +1444,13 @@ }, "frames": [ { + "filename": "/my_program.py", + "lineno": 6, "lines": [ { - "content": "sentence += char", "is_current": true, "lineno": 6, + "text": "sentence += char", "type": "line" } ], @@ -1648,7 +1474,7 @@ ], "text": [ "Traceback (most recent call last):", - " File \"my_program.py\", line 6, in ", + " File \"/my_program.py\", line 6, in ", " 5 | char = '!'", "--> 6 | sentence += char", " ^^^^", @@ -1664,6 +1490,15 @@ "step": "undefined_char" }, { + "get_solution": [ + "if excited:", + " char = '!'", + "else:", + " char = '.'", + "sentence += char", + "", + "print(sentence)" + ], "page": "if and else", "program": [ "sentence = 'Hello there'", @@ -1677,7 +1512,6 @@ "print(sentence)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -1718,7 +1552,6 @@ "print(new_sentence)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -1761,7 +1594,6 @@ "print(new_sentence)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -1773,6 +1605,7 @@ "step": "spongebob" }, { + "get_solution": "program", "page": "The Equality Operator", "program": [ "print(1 + 2 == 3)", @@ -1780,7 +1613,6 @@ "print('ab' + 'c' == 'a' + 'bc')" ], "response": { - "message": "", "passed": true, "result": [ { @@ -1792,16 +1624,17 @@ "step": "introducing_equality" }, { + "get_solution": "program", "page": "The Equality Operator", "program": [ "print(1 + 2 = 3)" ], "response": { - "message": "", "passed": true, "result": [ { - "text": " print(1 + 2 = 3)\n ^\nSyntaxError: expression cannot contain assignment, perhaps you meant \"==\"?\nat line 1\n\nA `SyntaxError` occurs when Python cannot understand your code.\n\nYou likely called a function with a named argument:\n\n a_function(invalid=something) \n\nwhere `invalid` is not a valid variable name in Python\neither because it starts with a number, or is a string,\nor contains a period, etc.\n\n\n", + "friendly": "

A SyntaxError occurs when Python cannot understand your code.

\n

You likely called a function with a named argument:

\n
a_function(invalid=something)\n
\n

where invalid is not a valid variable name in Python\neither because it starts with a number, or is a string,\nor contains a period, etc.

", + "text": " print(1 + 2 = 3)\n ^^^^^^^\nSyntaxError: expression cannot contain assignment, perhaps you meant \"==\"?\nat line 1\n", "type": "syntax_error" } ] @@ -1809,6 +1642,7 @@ "step": "equality_vs_assignment" }, { + "get_solution": "program", "page": "The Equality Operator", "program": [ "name = 'kesha'", @@ -1821,7 +1655,6 @@ "print(new_name)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -1862,7 +1695,6 @@ "print(new_name)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -1874,6 +1706,7 @@ "step": "if_equals_replacing_characters_exercise" }, { + "get_solution": "program", "page": "Introducing elif", "program": [ "dna = 'AGTAGCGTC'", @@ -1892,7 +1725,6 @@ "print(opposite_dna)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -1941,7 +1773,6 @@ "print(opposite_dna)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -1953,6 +1784,7 @@ "step": "dna_example_with_else" }, { + "get_solution": "program", "page": "Introducing elif", "program": [ "dna = 'AGTAGCGTC'", @@ -1971,7 +1803,6 @@ "print(opposite_dna)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -1983,13 +1814,21 @@ "step": "dna_example_with_elif" }, { + "get_solution": "program", "page": "Other Comparison Operators", "program": [ "1 != 2" ], "response": { - "message": "", "passed": true, + "prediction": { + "answer": "True", + "choices": [ + "True", + "False", + "\u9519\u8bef" + ] + }, "result": [ { "text": "True\n", @@ -2000,6 +1839,7 @@ "step": "try_not_equals" }, { + "get_solution": "program", "page": "Other Comparison Operators", "program": [ "sentence = 'The e key on my keyboard is broken'", @@ -2010,7 +1850,6 @@ "print(new_sentence)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2022,15 +1861,12 @@ "step": "brokn_kyboard" }, { - "get_solution": [ - "1 < 2" - ], + "get_solution": "program", "page": "Other Comparison Operators", "program": [ "1 < 2" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2042,15 +1878,12 @@ "step": "introducing_less_than" }, { - "get_solution": [ - "'1' < '2'" - ], + "get_solution": "program", "page": "Other Comparison Operators", "program": [ "'1' < '2'" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2062,6 +1895,7 @@ "step": "comparing_strings" }, { + "get_solution": "program", "page": "Other Comparison Operators", "program": [ "percentage = 73", @@ -2078,7 +1912,6 @@ "print(grade)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "B", @@ -2087,7 +1920,7 @@ "C", "B", "A", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -2131,7 +1964,6 @@ "print(first)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2143,6 +1975,7 @@ "step": "min_three_exercise" }, { + "get_solution": "program", "page": "Introducing Lists", "program": [ "words = ['This', 'is', 'a', 'list']", @@ -2151,7 +1984,6 @@ " print(word)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2163,6 +1995,7 @@ "step": "first_list" }, { + "get_solution": "program", "page": "Introducing Lists", "program": [ "x = 1", @@ -2170,7 +2003,6 @@ "print(things)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2182,6 +2014,7 @@ "step": "can_contain_anything" }, { + "get_solution": "program", "page": "Introducing Lists", "program": [ "numbers = [3, 1, 4, 1, 5, 9]", @@ -2193,7 +2026,6 @@ "print(total)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2222,7 +2054,6 @@ "print(total)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2262,7 +2093,6 @@ "print(total)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2280,7 +2110,7 @@ " double += [number * 2]", "print(double)" ], - "page": "Building New Lists", + "page": "\u5efa\u7acb\u65b0\u7684\u5217\u8868", "program": [ "numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]", "double = []", @@ -2289,7 +2119,6 @@ "print(double)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2308,7 +2137,7 @@ " big_numbers.append(number)", "print(big_numbers)" ], - "page": "Building New Lists", + "page": "\u5efa\u7acb\u65b0\u7684\u5217\u8868", "program": [ "numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]", "big_numbers = []", @@ -2318,7 +2147,6 @@ "print(big_numbers)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2338,7 +2166,7 @@ "", "print(found)" ], - "page": "Using break to end a loop early", + "page": "\u4f7f\u7528 break \u63d0\u524d\u7ed3\u675f\u5faa\u73af", "program": [ "things = ['This', 'is', 'a', 'list']", "thing_to_find = 'is'", @@ -2350,7 +2178,6 @@ "print(found)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2362,6 +2189,7 @@ "step": "list_contains_exercise" }, { + "get_solution": "program", "page": "Getting elements at a position, range(), and len()", "program": [ "words = ['This', 'is', 'a', 'list']", @@ -2372,7 +2200,6 @@ "print(words[3])" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2384,12 +2211,12 @@ "step": "introducing_subscripting" }, { + "get_solution": "program", "page": "Getting elements at a position, range(), and len()", "program": [ "words[4]" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2402,11 +2229,13 @@ }, "frames": [ { + "filename": "/my_program.py", + "lineno": 1, "lines": [ { - "content": "words[4]", "is_current": true, "lineno": 1, + "text": "words[4]", "type": "line" } ], @@ -2426,7 +2255,7 @@ ], "text": [ "Traceback (most recent call last):", - " File \"my_program.py\", line 1, in ", + " File \"/my_program.py\", line 1, in ", "--> 1 | words[4]", " ^^^^^^^^", "words = ['This', 'is', 'a', 'list']", @@ -2440,6 +2269,7 @@ "step": "index_error" }, { + "get_solution": "program", "page": "Getting elements at a position, range(), and len()", "program": [ "words = ['This', 'is', 'a', 'list']", @@ -2450,7 +2280,6 @@ " print(words[index])" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "0\nThis\n1\nis\n2\na\n3\nlist", @@ -2461,7 +2290,7 @@ "This\n0\nis\n1\na\n2\nlist\n3", "0\n1\n2\n3\nThis\nis\na\nlist", "This\nis\na\nlist\n0\n1\n2\n3", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -2474,6 +2303,7 @@ "step": "introducing_len_and_range" }, { + "get_solution": "program", "page": "Getting elements at a position, range(), and len()", "program": [ "words = ['This', 'is', 'a', 'list']", @@ -2484,7 +2314,6 @@ " print(words[index])" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2496,6 +2325,7 @@ "step": "range_len" }, { + "get_solution": "program", "page": "Getting elements at a position, range(), and len()", "program": [ "indices = range(4)", @@ -2506,7 +2336,6 @@ "print(indices[3])" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "0\n1\n2\n3", @@ -2516,7 +2345,7 @@ "[0]\n[1]\n[2]\n[3]", "[1]\n[2]\n[3]\n[4]", "This\nis\na\nlist", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -2529,22 +2358,22 @@ "step": "printing_the_range" }, { + "get_solution": "program", "page": "Getting elements at a position, range(), and len()", "program": [ "indices[4]" ], "response": { - "message": "", "passed": true, "prediction": { - "answer": "Error", + "answer": "\u9519\u8bef", "choices": [ "0", "1", "2", "3", "4", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -2558,11 +2387,13 @@ }, "frames": [ { + "filename": "/my_program.py", + "lineno": 1, "lines": [ { - "content": "indices[4]", "is_current": true, "lineno": 1, + "text": "indices[4]", "type": "line" } ], @@ -2576,13 +2407,13 @@ ] } ], - "friendly": "

An IndexError occurs when you try to get an item from a list,\na tuple, or a similar object (sequence), and use an index which\ndoes not exist; typically, this happens because the index you give\nis greater than the length of the sequence.

\n

You have tried to get the item with index 4 of indices,\nrange object of length 4.\nThe valid index values of indices are integers ranging from\n-4 to 3.

", + "friendly": "

An IndexError occurs when you try to get an item from a list,\na tuple, or a similar object (sequence), and use an index which\ndoes not exist; typically, this happens because the index you give\nis greater than the length of the sequence.

\n

You have tried to get the item with index 4 of indices,\nrange object of length 4.\nThe valid index values of indices are integers ranging from\n-4 to 3.

", "tail": "" } ], "text": [ "Traceback (most recent call last):", - " File \"my_program.py\", line 1, in ", + " File \"/my_program.py\", line 1, in ", "--> 1 | indices[4]", " ^^^^^^^^^^", "indices = range(0, 4)", @@ -2596,12 +2427,12 @@ "step": "indices_out_of_bounds" }, { + "get_solution": "program", "page": "Getting elements at a position, range(), and len()", "program": [ "range(4)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2613,12 +2444,12 @@ "step": "range_almost_the_same_as_list" }, { + "get_solution": "program", "page": "Getting elements at a position, range(), and len()", "program": [ "list(range(4))" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "[0, 1, 2, 3]", @@ -2630,7 +2461,7 @@ "range(0, 1, 2, 3)", "(0, 1, 2, 3)", "[0, 1, 2, 3]", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -2643,13 +2474,13 @@ "step": "range_versus_list" }, { + "get_solution": "program", "page": "Getting elements at a position, range(), and len()", "program": [ "words = ['This', 'is', 'a', 'list']", "print(len(words))" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "4", @@ -2660,7 +2491,7 @@ "3", "4", "5", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -2682,7 +2513,6 @@ "print(words[len(words) - 1])" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2707,7 +2537,6 @@ " print(words[index])" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2779,7 +2608,6 @@ " break" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2807,7 +2635,6 @@ " print(char1 + ' ' + char2)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2867,7 +2694,6 @@ " print(char1 + ' ' + char2)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2879,13 +2705,13 @@ "step": "zip_longest_exercise" }, { - "page": "Terminology: Calling functions and methods", + "get_solution": "program", + "page": "\u672f\u8bed\uff1a\u8c03\u7528\u51fd\u6570\u548c\u65b9\u6cd5", "program": [ "print(len)", "print(print)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2897,12 +2723,12 @@ "step": "print_functions" }, { - "page": "Terminology: Calling functions and methods", + "get_solution": "program", + "page": "\u672f\u8bed\uff1a\u8c03\u7528\u51fd\u6570\u548c\u65b9\u6cd5", "program": [ "print(callable(len))" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2914,14 +2740,14 @@ "step": "introducing_callable" }, { - "page": "Terminology: Calling functions and methods", + "get_solution": "program", + "page": "\u672f\u8bed\uff1a\u8c03\u7528\u51fd\u6570\u548c\u65b9\u6cd5", "program": [ "f = 'a string'", "print(callable(f))", "f()" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2940,11 +2766,13 @@ }, "frames": [ { + "filename": "/my_program.py", + "lineno": 3, "lines": [ { - "content": "f()", "is_current": true, "lineno": 3, + "text": "f()", "type": "line" } ], @@ -2964,7 +2792,7 @@ ], "text": [ "Traceback (most recent call last):", - " File \"my_program.py\", line 3, in ", + " File \"/my_program.py\", line 3, in ", " 2 | print(callable(f))", "--> 3 | f()", " ^^^", @@ -2979,7 +2807,8 @@ "step": "not_callable" }, { - "page": "Terminology: Calling functions and methods", + "get_solution": "program", + "page": "\u672f\u8bed\uff1a\u8c03\u7528\u51fd\u6570\u548c\u65b9\u6cd5", "program": [ "things = [1, 2, 3]", "length = len(things)", @@ -2987,7 +2816,6 @@ "print(printed)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -2999,13 +2827,13 @@ "step": "print_returns_none" }, { - "page": "Terminology: Calling functions and methods", + "get_solution": "program", + "page": "\u672f\u8bed\uff1a\u8c03\u7528\u51fd\u6570\u548c\u65b9\u6cd5", "program": [ "things = print([1, 2, 3])", "length = len(things)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3024,11 +2852,13 @@ }, "frames": [ { + "filename": "/my_program.py", + "lineno": 2, "lines": [ { - "content": "length = len(things)", "is_current": true, "lineno": 2, + "text": "length = len(things)", "type": "line" } ], @@ -3048,7 +2878,7 @@ ], "text": [ "Traceback (most recent call last):", - " File \"my_program.py\", line 2, in ", + " File \"/my_program.py\", line 2, in ", " 1 | things = print([1, 2, 3])", "--> 2 | length = len(things)", " ^^^^^^^^^^^", @@ -3063,14 +2893,14 @@ "step": "len_of_none" }, { - "page": "Terminology: Calling functions and methods", + "get_solution": "program", + "page": "\u672f\u8bed\uff1a\u8c03\u7528\u51fd\u6570\u548c\u65b9\u6cd5", "program": [ "word = 'Hello'", "print(word.upper)", "print(word.upper())" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3082,13 +2912,13 @@ "step": "methods_of_str" }, { - "page": "Terminology: Calling functions and methods", + "get_solution": "program", + "page": "\u672f\u8bed\uff1a\u8c03\u7528\u51fd\u6570\u548c\u65b9\u6cd5", "program": [ "word = 'Hello'", "word.append('!')" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3101,11 +2931,13 @@ }, "frames": [ { + "filename": "/my_program.py", + "lineno": 2, "lines": [ { - "content": "word.append('!')", "is_current": true, "lineno": 2, + "text": "word.append('!')", "type": "line" } ], @@ -3125,7 +2957,7 @@ ], "text": [ "Traceback (most recent call last):", - " File \"my_program.py\", line 2, in ", + " File \"/my_program.py\", line 2, in ", " 1 | word = 'Hello'", "--> 2 | word.append('!')", " ^^^^^^^^^^^", @@ -3140,6 +2972,7 @@ "step": "no_append_for_str" }, { + "get_solution": "program", "page": "Functions and Methods for Lists", "program": [ "nums = [1, 2, 3]", @@ -3150,7 +2983,6 @@ "print(nums)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3162,6 +2994,7 @@ "step": "append_vs_concatenate" }, { + "get_solution": "program", "page": "Functions and Methods for Lists", "program": [ "nums = [1, 2, 3]", @@ -3169,7 +3002,6 @@ "print(nums)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "[1, 9, 3]", @@ -3180,7 +3012,7 @@ "[9, 2, 3]", "[1, 9, 3]", "[1, 2, 9]", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -3193,12 +3025,12 @@ "step": "subscript_assignment_predict" }, { + "get_solution": "program", "page": "Functions and Methods for Lists", "program": [ "[7, 8, 9, 8].index(8)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "1", @@ -3209,7 +3041,7 @@ "1", "2", "3", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -3222,6 +3054,7 @@ "step": "index_predict_exercise" }, { + "get_solution": "program", "page": "Functions and Methods for Lists", "program": [ "nums = [1, 2, 3]", @@ -3229,7 +3062,6 @@ "print(nums)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "2\n[1, 3]", @@ -3240,7 +3072,7 @@ "2\n[2, 3]", "1\n[2, 1, 3]", "2\n[2, 1, 3]", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -3253,6 +3085,7 @@ "step": "pop_predict_exercise" }, { + "get_solution": "program", "page": "Functions and Methods for Lists", "program": [ "nums = [1, 2, 3]", @@ -3260,7 +3093,6 @@ "print(nums)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "[2, 3]", @@ -3271,7 +3103,7 @@ "1", "2", "3", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -3284,11 +3116,7 @@ "step": "remove_predict_exercise" }, { - "get_solution": [ - "x = ['a', 'b', 'c']", - "x.append(x.pop(0))", - "print(x)" - ], + "get_solution": "program", "page": "Functions and Methods for Lists", "program": [ "x = ['a', 'b', 'c']", @@ -3296,7 +3124,6 @@ "print(x)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3308,11 +3135,7 @@ "step": "pop_remove_index_subscript_assignment" }, { - "get_solution": [ - "x = ['a', 'b', 'c']", - "x[len(x) - 1] = x[0]", - "print(x)" - ], + "get_solution": "program", "page": "Functions and Methods for Lists", "program": [ "x = ['a', 'b', 'c']", @@ -3320,7 +3143,6 @@ "print(x)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3332,11 +3154,7 @@ "step": "subscript_assignment_exercise" }, { - "get_solution": [ - "x = ['a', 'b', 'c']", - "y = x + [x[0]]", - "print(y)" - ], + "get_solution": "program", "page": "Functions and Methods for Lists", "program": [ "x = ['a', 'b', 'c']", @@ -3344,7 +3162,6 @@ "print(y)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3356,11 +3173,7 @@ "step": "negative_index_concatenation_exercise" }, { - "get_solution": [ - "x = [1, 2, 0, 3]", - "x.pop(x.index(0))", - "print(x)" - ], + "get_solution": "program", "page": "Functions and Methods for Lists", "program": [ "x = [1, 2, 0, 3]", @@ -3368,7 +3181,6 @@ "print(x)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3380,12 +3192,12 @@ "step": "remove_exercise" }, { + "get_solution": "program", "page": "More List Functions and Methods", "program": [ "sorted([2, 9, 1, 8, 5, 6])" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "[1, 2, 5, 6, 8, 9]", @@ -3394,7 +3206,7 @@ "[1, 8, 6, 2, 5, 9]", "[1, 2, 5, 6, 8, 9]", "[2, 9, 1, 8, 5, 6]", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -3407,6 +3219,7 @@ "step": "sorted_predict_exercise" }, { + "get_solution": "program", "page": "More List Functions and Methods", "program": [ "nums = [2, 9, 1, 8, 5, 64]", @@ -3414,7 +3227,6 @@ "print(2 in nums)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "False\nTrue", @@ -3423,7 +3235,7 @@ "False\nTrue", "True\nTrue", "False\nFalse", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -3436,12 +3248,12 @@ "step": "in_predict_exercise" }, { + "get_solution": "program", "page": "More List Functions and Methods", "program": [ "sum([5, 3, 4])" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "12", @@ -3449,7 +3261,7 @@ "10", "12", "7", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -3462,12 +3274,12 @@ "step": "sum_predict_exercise" }, { + "get_solution": "program", "page": "More List Functions and Methods", "program": [ "[1, 2, 3, 2, 7, 2, 5].count(2)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "3", @@ -3476,7 +3288,7 @@ "1", "2", "3", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -3489,11 +3301,7 @@ "step": "count_predict_exercise" }, { - "get_solution": [ - "x = [1, 2, 0, 3]", - "y = x.count(1) > 0", - "print(y)" - ], + "get_solution": "program", "page": "More List Functions and Methods", "program": [ "x = [1, 2, 0, 3]", @@ -3501,7 +3309,6 @@ "print(y)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3513,11 +3320,7 @@ "step": "count_in_sorted_sum" }, { - "get_solution": [ - "x = [15, 12, -6, 3]", - "y = sum(x) / len(x)", - "print(y)" - ], + "get_solution": "program", "page": "More List Functions and Methods", "program": [ "x = [15, 12, -6, 3]", @@ -3525,7 +3328,6 @@ "print(y)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3537,11 +3339,7 @@ "step": "average_exercise" }, { - "get_solution": [ - "x = 100", - "y = sum(range(x + 1))", - "print(y)" - ], + "get_solution": "program", "page": "More List Functions and Methods", "program": [ "x = 100", @@ -3549,7 +3347,6 @@ "print(y)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3561,11 +3358,7 @@ "step": "sum_range_exercise" }, { - "get_solution": [ - "x = [12, -6, 2, -1, 3]", - "y = sorted(x)[1]", - "print(y)" - ], + "get_solution": "program", "page": "More List Functions and Methods", "program": [ "x = [12, -6, 2, -1, 3]", @@ -3573,7 +3366,6 @@ "print(y)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3585,12 +3377,12 @@ "step": "second_smallest_in_list_exercise" }, { + "get_solution": "program", "page": "String Methods and Immutability", "program": [ "print('the' in 'feed the dog and the cat')" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3602,6 +3394,7 @@ "step": "string_in_step" }, { + "get_solution": "program", "page": "String Methods and Immutability", "program": [ "string = 'feed the dog and the cat'", @@ -3609,7 +3402,6 @@ "print(string.index('the'))" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3621,12 +3413,12 @@ "step": "string_count_index" }, { + "get_solution": "program", "page": "String Methods and Immutability", "program": [ "'Python'.append(' is cool!')" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3639,11 +3431,13 @@ }, "frames": [ { + "filename": "/my_program.py", + "lineno": 1, "lines": [ { - "content": "'Python'.append(' is cool!')", "is_current": true, "lineno": 1, + "text": "'Python'.append(' is cool!')", "type": "line" } ], @@ -3658,7 +3452,7 @@ ], "text": [ "Traceback (most recent call last):", - " File \"my_program.py\", line 1, in ", + " File \"/my_program.py\", line 1, in ", "--> 1 | 'Python'.append(' is cool!')", " ^^^^^^^^^^^^^^^", "", @@ -3671,6 +3465,7 @@ "step": "mutation_string_append" }, { + "get_solution": "program", "page": "String Methods and Immutability", "program": [ "sentence = \"Python rocks!\"", @@ -3679,7 +3474,6 @@ "print(new_sentence)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3691,15 +3485,12 @@ "step": "string_lower_upper" }, { - "get_solution": [ - "max([21, 55, 4, 91, 62, 49])" - ], + "get_solution": "program", "page": "How to Find Information with Google, and more", "program": [ "max([21, 55, 4, 91, 62, 49])" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3711,11 +3502,7 @@ "step": "sum_list" }, { - "get_solution": [ - "nums = [1, 2, 3, 4, 5]", - "nums.insert(2, 9)", - "print(nums)" - ], + "get_solution": "program", "page": "How to Find Information with Google, and more", "program": [ "nums = [1, 2, 3, 4, 5]", @@ -3723,7 +3510,6 @@ "print(nums)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3735,16 +3521,16 @@ "step": "list_insert" }, { + "get_solution": "program", "page": "How to Find Information with Google, and more", "program": [ "dir([])" ], "response": { - "message": "", "passed": true, "result": [ { - "text": "['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']\n", + "text": "['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']\n", "type": "stdout" } ] @@ -3752,6 +3538,7 @@ "step": "dir_list" }, { + "get_solution": "program", "page": "Understanding Programs With Python Tutor", "program": [ "all_numbers = [2, 4, 8, 1, 9, 7]", @@ -3769,7 +3556,6 @@ "print(big_numbers)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3781,6 +3567,7 @@ "step": "run_with_python_tutor" }, { + "get_solution": "program", "page": "== vs is, and Having Multiple Names for One Value", "program": [ "list1 = [1, 2, 3]", @@ -3798,7 +3585,6 @@ "print(list2)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3810,6 +3596,7 @@ "step": "two_separate_lists" }, { + "get_solution": "program", "page": "== vs is, and Having Multiple Names for One Value", "program": [ "list1 = [1, 2, 3]", @@ -3827,7 +3614,6 @@ "print(list2)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3839,6 +3625,7 @@ "step": "same_list" }, { + "get_solution": "program", "page": "Modifying While Iterating", "program": [ "numbers = [10, 7, 8, 3, 12, 15]", @@ -3849,7 +3636,6 @@ "print(numbers)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3862,11 +3648,13 @@ }, "frames": [ { + "filename": "/my_program.py", + "lineno": 3, "lines": [ { - "content": "number = numbers[i]", "is_current": true, "lineno": 3, + "text": "number = numbers[i]", "type": "line" } ], @@ -3906,7 +3694,7 @@ ], "text": [ "Traceback (most recent call last):", - " File \"my_program.py\", line 3, in ", + " File \"/my_program.py\", line 3, in ", " 2 | for i in range(len(numbers)):", "--> 3 | number = numbers[i]", " ^^^^^^^^^^", @@ -3926,6 +3714,7 @@ "step": "run_broken_with_python_tutor" }, { + "get_solution": "program", "page": "Modifying While Iterating", "program": [ "numbers = [10, 7, 8, 3, 12, 15]", @@ -3935,7 +3724,6 @@ "print(numbers)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3947,6 +3735,7 @@ "step": "remove_instead_of_pop" }, { + "get_solution": "program", "page": "Modifying While Iterating", "program": [ "numbers = [10, 7, 8, 3, 12, 15]", @@ -3956,7 +3745,6 @@ "print(numbers)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3968,6 +3756,7 @@ "step": "make_copy" }, { + "get_solution": "program", "page": "Modifying While Iterating", "program": [ "numbers = [10, 7, 8, 3, 12, 15]", @@ -3979,7 +3768,6 @@ "print(big_numbers)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -3991,6 +3779,7 @@ "step": "make_copy2" }, { + "get_solution": "program", "page": "Modifying While Iterating", "program": [ "numbers = [10, 7, 8, 3, 12, 15]", @@ -4002,7 +3791,6 @@ "print(big_numbers)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4014,16 +3802,17 @@ "step": "make_new_list" }, { + "get_solution": "program", "page": "Single and Double Quotes in Strings", "program": [ "print('Alice's Diner')" ], "response": { - "message": "", "passed": true, "result": [ { - "text": " print('Alice's Diner')\n ^\nSyntaxError: invalid syntax\nat line 1\n\nA `SyntaxError` occurs when Python cannot understand your code.\n\nI suspect that you were trying to use a quote character inside a string\nthat was enclosed in quotes of the same kind.\nPerhaps you should have escaped the inner quote character:\n\n print('Alice\\'s Diner')\n ^^\n\n\n", + "friendly": "

A SyntaxError occurs when Python cannot understand your code.

\n

I suspect that you were trying to use a quote character inside a string\nthat was enclosed in quotes of the same kind.\nPerhaps you should have escaped the inner quote character:

\n
print('Alice\\'s Diner')\n            ^^\n
", + "text": " print('Alice's Diner')\n ^\nSyntaxError: unterminated string literal (detected at line 1)\nat line 1\n", "type": "syntax_error" } ] @@ -4031,12 +3820,12 @@ "step": "single_quotes_apostrophe" }, { + "get_solution": "program", "page": "Single and Double Quotes in Strings", "program": [ "print(\"Alice's Diner\")" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4048,19 +3837,19 @@ "step": "double_quotes" }, { + "get_solution": "program", "page": "Single and Double Quotes in Strings", "program": [ "'Alice' == \"Alice\"" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "True", "choices": [ "True", "False", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -4073,15 +3862,12 @@ "step": "single_double_quotes_equal" }, { - "get_solution": [ - "print(\"Special cases aren't special enough to break the rules.\")" - ], + "get_solution": "program", "page": "Single and Double Quotes in Strings", "program": [ "print(\"Special cases aren't special enough to break the rules.\")" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4093,15 +3879,12 @@ "step": "double_quote_exercise" }, { - "get_solution": [ - "print('\"Talk is cheap. Show me the code.\" - Linus Torvalds')" - ], + "get_solution": "program", "page": "Single and Double Quotes in Strings", "program": [ "print('\"Talk is cheap. Show me the code.\" - Linus Torvalds')" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4113,6 +3896,7 @@ "step": "single_quote_exercise" }, { + "get_solution": "program", "page": "f-strings", "program": [ "name = \"Alice\"", @@ -4121,7 +3905,6 @@ "print(f\"{name} went to {meal} with {friend}.\")" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "Alice went to lunch with Bob.", @@ -4135,7 +3918,7 @@ "'Alice' went to 'lunch' with 'Bob'.", "\"Alice went to lunch with Bob.\"", "Alice went to lunch with Bob.", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -4148,6 +3931,7 @@ "step": "introduce_f_strings" }, { + "get_solution": "program", "page": "f-strings", "program": [ "name = \"Alice\"", @@ -4155,16 +3939,15 @@ "print(\"Hello \" + name + \". You are \" + age + \" years old.\")" ], "response": { - "message": "", "passed": true, "prediction": { - "answer": "Error", + "answer": "\u9519\u8bef", "choices": [ "\"Hello \" + name + \". You are \" + age + \" years old.\"", "Hello name. You are age years old.", "Hello Alice. You are 20 years old.", "Hello 'Alice'. You are 20 years old.", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -4178,11 +3961,13 @@ }, "frames": [ { + "filename": "/my_program.py", + "lineno": 3, "lines": [ { - "content": "print("Hello " + name + ". You are " + age + " years old.")", "is_current": true, "lineno": 3, + "text": "print("Hello " + name + ". You are " + age + " years old.")", "type": "line" } ], @@ -4214,7 +3999,7 @@ ], "text": [ "Traceback (most recent call last):", - " File \"my_program.py\", line 3, in ", + " File \"/my_program.py\", line 3, in ", " 2 | age = 20", "--> 3 | print(\"Hello \" + name + \". You are \" + age + \" years old.\")", " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^", @@ -4232,11 +4017,7 @@ "step": "concatenate_string_number" }, { - "get_solution": [ - "name = \"Alice\"", - "age = 20", - "print(f'Hello {name}. You are {age} years old.')" - ], + "get_solution": "program", "page": "f-strings", "program": [ "name = \"Alice\"", @@ -4244,7 +4025,6 @@ "print(f'Hello {name}. You are {age} years old.')" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4256,12 +4036,12 @@ "step": "basic_f_string_exercise" }, { + "get_solution": "program", "page": "f-strings", "program": [ "f\"2 * 3 + 4 is equal to {2 * 3 + 4}\"" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4278,15 +4058,14 @@ ], "page": "f-strings", "program": [ - "people = ['eODoUwNzS', 'ofHBEzZxs', 'zwTrQA', 'LDaOKmpHU', 'HCMLTt', 'NbRmEjaoyD']", + "people = ['Alice', 'Bob', 'Charlie']", "print(f\"There are {len(people)} people waiting, the first one's name is {people[0]}.\")" ], "response": { - "message": "", "passed": true, "result": [ { - "text": "There are 6 people waiting, the first one's name is eODoUwNzS.\n", + "text": "There are 3 people waiting, the first one's name is Alice.\n", "type": "stdout" } ] @@ -4294,6 +4073,7 @@ "step": "fix_broken_program" }, { + "get_solution": "program", "page": "Introducing Nested Loops", "program": [ "for letter in \"ABC\":", @@ -4303,7 +4083,6 @@ " print('---')" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "A\nA 0\nA 1\nA 2\nA 3\n---\nB\nB 0\nB 1\nB 2\nB 3\n---\nC\nC 0\nC 1\nC 2\nC 3\n---", @@ -4312,7 +4091,7 @@ "A\nA 0\nA 1\nA 2\nA 3\n---\nB\nB 0\nB 1\nB 2\nB 3\n---\nC\nC 0\nC 1\nC 2\nC 3\n---", "A 1\nA 2\nA 3\nA 4\n---\nB 1\nB 2\nB 3\nB 4\n---\nC 1\nC 2\nC 3\nC 4\n---", "A\nB\nC\n---\nA 0\nB 0\nC 0\n---\nA 1\nB 1\nC 1\n---\nA 2\nB 2\nC 2\n---\nA 3\nB 3\nC 3", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -4343,11 +4122,13 @@ }, "frames": [ { + "filename": "/my_program.py", + "lineno": 1, "lines": [ { - "content": "print(1 + "x")", "is_current": true, "lineno": 1, + "text": "print(1 + "x")", "type": "line" } ], @@ -4362,7 +4143,7 @@ ], "text": [ "Traceback (most recent call last):", - " File \"my_program.py\", line 1, in ", + " File \"/my_program.py\", line 1, in ", "--> 1 | print(1 + \"x\")", " ^^^^^^^", "", @@ -4382,18 +4163,18 @@ " left += 1", " right += 1", " print(f'{left} x {right} = {left * right}')", - " print('----------')" + " print('---')" ], "response": { "message": "

You added 1 to your outer loop variable at the wrong place!\nWhere should you do that instead to fix it?

", "passed": false, "result": [ { - "text": "1 x 1 = 1\n2 x 2 = 4\n3 x 3 = 9\n4 x 4 = 16\n5 x 5 = 25\n6 x 6 = 36\n7 x 7 = 49\n8 x 8 = 64\n9 x 9 = 81\n10 x 10 = 100\n11 x 11 = 121\n12 x 12 = 144\n----------\n2 x 1 = 2\n3 x 2 = 6\n4 x 3 = 12\n5 x 4 = 20\n6 x 5 = 30\n7 x 6 = 42\n8 x 7 = 56\n9 x 8 = 72\n10 x 9 = 90\n11 x 10 = 110\n12 x 11 = 132\n13 x 12 = 156\n----------\n3 x 1 = 3\n4 x 2 = 8\n5 x 3 = 15\n6 x 4 = 24\n7 x 5 = 35\n8 x 6 = 48\n9 x 7 = 63\n10 x 8 = 80\n11 x 9 = 99\n12 x 10 = 120\n13 x 11 = 143\n14 x 12 = 168\n----------\n4 x 1 = 4\n5 x 2 = 10\n6 x 3 = 18\n7 x 4 = 28\n8 x 5 = 40\n9 x 6 = 54\n10 x 7 = 70\n11 x 8 = 88\n12 x 9 = 108\n13 x 10 = 130\n14 x 11 = 154\n15 x 12 = 180\n----------\n5 x 1 = 5\n6 x 2 = 12\n7 x 3 = 21\n8 x 4 = 32\n9 x 5 = 45\n10 x 6 = 60\n11 x 7 = 77\n12 x 8 = 96\n13 x 9 = 117\n14 x 10 = 140\n15 x 11 = 165\n16 x 12 = 192\n----------\n6 x 1 = 6\n7 x 2 = 14\n8 x 3 = 24\n9 x 4 = 36\n10 x 5 = 50\n11 x 6 = 66\n12 x 7 = 84\n13 x 8 = 104\n14 x 9 = 126\n15 x 10 = 150\n16 x 11 = 176\n17 x 12 = 204\n----------\n7 x 1 = 7\n8 x 2 = 16\n9 x 3 = 27\n10 x 4 = 40\n11 x 5 = 55\n12 x 6 = 72\n13 x 7 = 91", + "text": "1 x 1 = 1\n2 x 2 = 4\n3 x 3 = 9\n4 x 4 = 16\n5 x 5 = 25\n6 x 6 = 36\n7 x 7 = 49\n8 x 8 = 64\n9 x 9 = 81\n10 x 10 = 100\n11 x 11 = 121\n12 x 12 = 144\n---\n2 x 1 = 2\n3 x 2 = 6\n4 x 3 = 12\n5 x 4 = 20\n6 x 5 = 30\n7 x 6 = 42\n8 x 7 = 56\n9 x 8 = 72\n10 x 9 = 90\n11 x 10 = 110\n12 x 11 = 132\n13 x 12 = 156\n---\n3 x 1 = 3\n4 x 2 = 8\n5 x 3 = 15\n6 x 4 = 24\n7 x 5 = 35\n8 x 6 = 48\n9 x 7 = 63\n10 x 8 = 80\n11 x 9 = 99\n12 x 10 = 120\n13 x 11 = 143\n14 x 12 = 168\n---\n4 x 1 = 4\n5 x 2 = 10\n6 x 3 = 18\n7 x 4 = 28\n8 x 5 = 40\n9 x 6 = 54\n10 x 7 = 70\n11 x 8 = 88\n12 x 9 = 108\n13 x 10 = 130\n14 x 11 = 154\n15 x 12 = 180\n---\n5 x 1 = 5\n6 x 2 = 12\n7 x 3 = 21\n8 x 4 = 32\n9 x 5 = 45\n10 x 6 = 60\n11 x 7 = 77\n12 x 8 = 96\n13 x 9 = 117\n14 x 10 = 140\n15 x 11 = 165\n16 x 12 = 192\n---\n6 x 1 = 6\n7 x 2 = 14\n8 x 3 = 24\n9 x 4 = 36\n10 x 5 = 50\n11 x 6 = 66\n12 x 7 = 84\n13 x 8 = 104\n14 x 9 = 126\n15 x 10 = 150\n16 x 11 = 176\n17 x 12 = 204\n---\n7 x 1 = 7\n8 x 2 = 16\n9 x 3 = 27\n10 x 4 = 40\n11 x 5 = 55\n12 x 6 = 72\n13 x 7 = 91\n14 x 8 = 112\n15 x 9 = 135\n16 x 10 = 160\n17 x 11 = 187", "type": "stdout" }, { - "text": "\n14 x 8 = 112\n15 x 9 = 135\n16 x 10 = 160\n17 x 11 = 187\n18 x 12 = 216\n----------\n8 x 1 = 8\n9 x 2 = 18\n10 x 3 = 30\n11 x 4 = 44\n12 x 5 = 60\n13 x 6 = 78\n14 x 7 = 98\n15 x 8 = 120\n16 x 9 = 144\n17 x 10 = 170\n18 x 11 = 198\n19 x 12 = 228\n----------\n9 x 1 = 9\n10 x 2 = 20\n11 x 3 = 33\n12 x 4 = 48\n13 x 5 = 65\n14 x 6 = 84\n15 x 7 = 105\n16 x 8 = 128\n17 x 9 = 153\n18 x 10 = 180\n19 x 11 = 209\n20 x 12 = 240\n----------\n10 x 1 = 10\n11 x 2 = 22\n12 x 3 = 36\n13 x 4 = 52\n14 x 5 = 70\n15 x 6 = 90\n16 x 7 = 112\n17 x 8 = 136\n18 x 9 = 162\n19 x 10 = 190\n20 x 11 = 220\n21 x 12 = 252\n----------\n11 x 1 = 11\n12 x 2 = 24\n13 x 3 = 39\n14 x 4 = 56\n15 x 5 = 75\n16 x 6 = 96\n17 x 7 = 119\n18 x 8 = 144\n19 x 9 = 171\n20 x 10 = 200\n21 x 11 = 231\n22 x 12 = 264\n----------\n12 x 1 = 12\n13 x 2 = 26\n14 x 3 = 42\n15 x 4 = 60\n16 x 5 = 80\n17 x 6 = 102\n18 x 7 = 126\n19 x 8 = 152\n20 x 9 = 180\n21 x 10 = 210\n22 x 11 = 242\n23 x 12 = 276\n----------\n", + "text": "\n18 x 12 = 216\n---\n8 x 1 = 8\n9 x 2 = 18\n10 x 3 = 30\n11 x 4 = 44\n12 x 5 = 60\n13 x 6 = 78\n14 x 7 = 98\n15 x 8 = 120\n16 x 9 = 144\n17 x 10 = 170\n18 x 11 = 198\n19 x 12 = 228\n---\n9 x 1 = 9\n10 x 2 = 20\n11 x 3 = 33\n12 x 4 = 48\n13 x 5 = 65\n14 x 6 = 84\n15 x 7 = 105\n16 x 8 = 128\n17 x 9 = 153\n18 x 10 = 180\n19 x 11 = 209\n20 x 12 = 240\n---\n10 x 1 = 10\n11 x 2 = 22\n12 x 3 = 36\n13 x 4 = 52\n14 x 5 = 70\n15 x 6 = 90\n16 x 7 = 112\n17 x 8 = 136\n18 x 9 = 162\n19 x 10 = 190\n20 x 11 = 220\n21 x 12 = 252\n---\n11 x 1 = 11\n12 x 2 = 24\n13 x 3 = 39\n14 x 4 = 56\n15 x 5 = 75\n16 x 6 = 96\n17 x 7 = 119\n18 x 8 = 144\n19 x 9 = 171\n20 x 10 = 200\n21 x 11 = 231\n22 x 12 = 264\n---\n12 x 1 = 12\n13 x 2 = 26\n14 x 3 = 42\n15 x 4 = 60\n16 x 5 = 80\n17 x 6 = 102\n18 x 7 = 126\n19 x 8 = 152\n20 x 9 = 180\n21 x 10 = 210\n22 x 11 = 242\n23 x 12 = 276\n---\n", "type": "stdout" } ] @@ -4417,18 +4198,18 @@ " print(left, 'x 10 =', left * 10)", " print(left, 'x 11 =', left * 11)", " print(left, 'x 12 =', left * 12)", - " print('----------')" + " print('---')" ], "response": { "message": "

Your solution is too long. You only need a few lines of code for this problem.\nUse a nested loop so that you don't need to repeat yourself.\nThe computer will do the repetition for you!

", "passed": false, "result": [ { - "text": "1 x 1 = 1\n1 x 2 = 2\n1 x 3 = 3\n1 x 4 = 4\n1 x 5 = 5\n1 x 6 = 6\n1 x 7 = 7\n1 x 8 = 8\n1 x 9 = 9\n1 x 10 = 10\n1 x 11 = 11\n1 x 12 = 12\n----------\n2 x 1 = 2\n2 x 2 = 4\n2 x 3 = 6\n2 x 4 = 8\n2 x 5 = 10\n2 x 6 = 12\n2 x 7 = 14\n2 x 8 = 16\n2 x 9 = 18\n2 x 10 = 20\n2 x 11 = 22\n2 x 12 = 24\n----------\n3 x 1 = 3\n3 x 2 = 6\n3 x 3 = 9\n3 x 4 = 12\n3 x 5 = 15\n3 x 6 = 18\n3 x 7 = 21\n3 x 8 = 24\n3 x 9 = 27\n3 x 10 = 30\n3 x 11 = 33\n3 x 12 = 36\n----------\n4 x 1 = 4\n4 x 2 = 8\n4 x 3 = 12\n4 x 4 = 16\n4 x 5 = 20\n4 x 6 = 24\n4 x 7 = 28\n4 x 8 = 32\n4 x 9 = 36\n4 x 10 = 40\n4 x 11 = 44\n4 x 12 = 48\n----------\n5 x 1 = 5\n5 x 2 = 10\n5 x 3 = 15\n5 x 4 = 20\n5 x 5 = 25\n5 x 6 = 30\n5 x 7 = 35\n5 x 8 = 40\n5 x 9 = 45\n5 x 10 = 50\n5 x 11 = 55\n5 x 12 = 60\n----------\n6 x 1 = 6\n6 x 2 = 12\n6 x 3 = 18\n6 x 4 = 24\n6 x 5 = 30\n6 x 6 = 36\n6 x 7 = 42\n6 x 8 = 48\n6 x 9 = 54\n6 x 10 = 60\n6 x 11 = 66\n6 x 12 = 72\n----------\n7 x 1 = 7\n7 x 2 = 14\n7 x 3 = 21\n7 x 4 = 28\n7 x 5 = 35\n7 x 6 = 42\n7 x 7 = 49\n7 x 8 = 56\n7 x 9 = 63\n7 x 10 = 70\n7 x 11 = 77\n7 x 12 = 84\n----------", + "text": "1 x 1 = 1\n1 x 2 = 2\n1 x 3 = 3\n1 x 4 = 4\n1 x 5 = 5\n1 x 6 = 6\n1 x 7 = 7\n1 x 8 = 8\n1 x 9 = 9\n1 x 10 = 10\n1 x 11 = 11\n1 x 12 = 12\n---\n2 x 1 = 2\n2 x 2 = 4\n2 x 3 = 6\n2 x 4 = 8\n2 x 5 = 10\n2 x 6 = 12\n2 x 7 = 14\n2 x 8 = 16\n2 x 9 = 18\n2 x 10 = 20\n2 x 11 = 22\n2 x 12 = 24\n---\n3 x 1 = 3\n3 x 2 = 6\n3 x 3 = 9\n3 x 4 = 12\n3 x 5 = 15\n3 x 6 = 18\n3 x 7 = 21\n3 x 8 = 24\n3 x 9 = 27\n3 x 10 = 30\n3 x 11 = 33\n3 x 12 = 36\n---\n4 x 1 = 4\n4 x 2 = 8\n4 x 3 = 12\n4 x 4 = 16\n4 x 5 = 20\n4 x 6 = 24\n4 x 7 = 28\n4 x 8 = 32\n4 x 9 = 36\n4 x 10 = 40\n4 x 11 = 44\n4 x 12 = 48\n---\n5 x 1 = 5\n5 x 2 = 10\n5 x 3 = 15\n5 x 4 = 20\n5 x 5 = 25\n5 x 6 = 30\n5 x 7 = 35\n5 x 8 = 40\n5 x 9 = 45\n5 x 10 = 50\n5 x 11 = 55\n5 x 12 = 60\n---\n6 x 1 = 6\n6 x 2 = 12\n6 x 3 = 18\n6 x 4 = 24\n6 x 5 = 30\n6 x 6 = 36\n6 x 7 = 42\n6 x 8 = 48\n6 x 9 = 54\n6 x 10 = 60\n6 x 11 = 66\n6 x 12 = 72\n---\n7 x 1 = 7\n7 x 2 = 14\n7 x 3 = 21\n7 x 4 = 28\n7 x 5 = 35\n7 x 6 = 42\n7 x 7 = 49\n7 x 8 = 56\n7 x 9 = 63\n7 x 10 = 70\n7 x 11 = 77\n7 x 12 = 84\n---\n8 x 1 = 8\n8 x 2 = 16\n8 x 3 = 24\n8 x 4 = 32\n8 x 5 =", "type": "stdout" }, { - "text": "\n8 x 1 = 8\n8 x 2 = 16\n8 x 3 = 24\n8 x 4 = 32\n8 x 5 = 40\n8 x 6 = 48\n8 x 7 = 56\n8 x 8 = 64\n8 x 9 = 72\n8 x 10 = 80\n8 x 11 = 88\n8 x 12 = 96\n----------\n9 x 1 = 9\n9 x 2 = 18\n9 x 3 = 27\n9 x 4 = 36\n9 x 5 = 45\n9 x 6 = 54\n9 x 7 = 63\n9 x 8 = 72\n9 x 9 = 81\n9 x 10 = 90\n9 x 11 = 99\n9 x 12 = 108\n----------\n10 x 1 = 10\n10 x 2 = 20\n10 x 3 = 30\n10 x 4 = 40\n10 x 5 = 50\n10 x 6 = 60\n10 x 7 = 70\n10 x 8 = 80\n10 x 9 = 90\n10 x 10 = 100\n10 x 11 = 110\n10 x 12 = 120\n----------\n11 x 1 = 11\n11 x 2 = 22\n11 x 3 = 33\n11 x 4 = 44\n11 x 5 = 55\n11 x 6 = 66\n11 x 7 = 77\n11 x 8 = 88\n11 x 9 = 99\n11 x 10 = 110\n11 x 11 = 121\n11 x 12 = 132\n----------\n12 x 1 = 12\n12 x 2 = 24\n12 x 3 = 36\n12 x 4 = 48\n12 x 5 = 60\n12 x 6 = 72\n12 x 7 = 84\n12 x 8 = 96\n12 x 9 = 108\n12 x 10 = 120\n12 x 11 = 132\n12 x 12 = 144\n----------\n", + "text": " 40\n8 x 6 = 48\n8 x 7 = 56\n8 x 8 = 64\n8 x 9 = 72\n8 x 10 = 80\n8 x 11 = 88\n8 x 12 = 96\n---\n9 x 1 = 9\n9 x 2 = 18\n9 x 3 = 27\n9 x 4 = 36\n9 x 5 = 45\n9 x 6 = 54\n9 x 7 = 63\n9 x 8 = 72\n9 x 9 = 81\n9 x 10 = 90\n9 x 11 = 99\n9 x 12 = 108\n---\n10 x 1 = 10\n10 x 2 = 20\n10 x 3 = 30\n10 x 4 = 40\n10 x 5 = 50\n10 x 6 = 60\n10 x 7 = 70\n10 x 8 = 80\n10 x 9 = 90\n10 x 10 = 100\n10 x 11 = 110\n10 x 12 = 120\n---\n11 x 1 = 11\n11 x 2 = 22\n11 x 3 = 33\n11 x 4 = 44\n11 x 5 = 55\n11 x 6 = 66\n11 x 7 = 77\n11 x 8 = 88\n11 x 9 = 99\n11 x 10 = 110\n11 x 11 = 121\n11 x 12 = 132\n---\n12 x 1 = 12\n12 x 2 = 24\n12 x 3 = 36\n12 x 4 = 48\n12 x 5 = 60\n12 x 6 = 72\n12 x 7 = 84\n12 x 8 = 96\n12 x 9 = 108\n12 x 10 = 120\n12 x 11 = 132\n12 x 12 = 144\n---\n", "type": "stdout" } ] @@ -4444,18 +4225,18 @@ " right += 1", " # for the sake of translation", " print(f'{left} x {right} = {left * right}'.replace('x', '*'))", - " print('----------')" + " print('---')" ], "response": { "message": "

That's almost correct! Make sure to display the right character x in your table.\nFor example, your solution should display 3 x 4 = 12 and not 3 * 4 = 12.

", "passed": false, "result": [ { - "text": "1 * 1 = 1\n1 * 2 = 2\n1 * 3 = 3\n1 * 4 = 4\n1 * 5 = 5\n1 * 6 = 6\n1 * 7 = 7\n1 * 8 = 8\n1 * 9 = 9\n1 * 10 = 10\n1 * 11 = 11\n1 * 12 = 12\n----------\n2 * 1 = 2\n2 * 2 = 4\n2 * 3 = 6\n2 * 4 = 8\n2 * 5 = 10\n2 * 6 = 12\n2 * 7 = 14\n2 * 8 = 16\n2 * 9 = 18\n2 * 10 = 20\n2 * 11 = 22\n2 * 12 = 24\n----------\n3 * 1 = 3\n3 * 2 = 6\n3 * 3 = 9\n3 * 4 = 12\n3 * 5 = 15\n3 * 6 = 18\n3 * 7 = 21\n3 * 8 = 24\n3 * 9 = 27\n3 * 10 = 30\n3 * 11 = 33\n3 * 12 = 36\n----------\n4 * 1 = 4\n4 * 2 = 8\n4 * 3 = 12\n4 * 4 = 16\n4 * 5 = 20\n4 * 6 = 24\n4 * 7 = 28\n4 * 8 = 32\n4 * 9 = 36\n4 * 10 = 40\n4 * 11 = 44\n4 * 12 = 48\n----------\n5 * 1 = 5\n5 * 2 = 10\n5 * 3 = 15\n5 * 4 = 20\n5 * 5 = 25\n5 * 6 = 30\n5 * 7 = 35\n5 * 8 = 40\n5 * 9 = 45\n5 * 10 = 50\n5 * 11 = 55\n5 * 12 = 60\n----------\n6 * 1 = 6\n6 * 2 = 12\n6 * 3 = 18\n6 * 4 = 24\n6 * 5 = 30\n6 * 6 = 36\n6 * 7 = 42\n6 * 8 = 48\n6 * 9 = 54\n6 * 10 = 60\n6 * 11 = 66\n6 * 12 = 72\n----------\n7 * 1 = 7\n7 * 2 = 14\n7 * 3 = 21\n7 * 4 = 28\n7 * 5 = 35\n7 * 6 = 42\n7 * 7 = 49\n7 * 8 = 56\n7 * 9 = 63\n7 * 10 = 70\n7 * 11 = 77\n7 * 12 = 84\n----------", + "text": "1 * 1 = 1\n1 * 2 = 2\n1 * 3 = 3\n1 * 4 = 4\n1 * 5 = 5\n1 * 6 = 6\n1 * 7 = 7\n1 * 8 = 8\n1 * 9 = 9\n1 * 10 = 10\n1 * 11 = 11\n1 * 12 = 12\n---\n2 * 1 = 2\n2 * 2 = 4\n2 * 3 = 6\n2 * 4 = 8\n2 * 5 = 10\n2 * 6 = 12\n2 * 7 = 14\n2 * 8 = 16\n2 * 9 = 18\n2 * 10 = 20\n2 * 11 = 22\n2 * 12 = 24\n---\n3 * 1 = 3\n3 * 2 = 6\n3 * 3 = 9\n3 * 4 = 12\n3 * 5 = 15\n3 * 6 = 18\n3 * 7 = 21\n3 * 8 = 24\n3 * 9 = 27\n3 * 10 = 30\n3 * 11 = 33\n3 * 12 = 36\n---\n4 * 1 = 4\n4 * 2 = 8\n4 * 3 = 12\n4 * 4 = 16\n4 * 5 = 20\n4 * 6 = 24\n4 * 7 = 28\n4 * 8 = 32\n4 * 9 = 36\n4 * 10 = 40\n4 * 11 = 44\n4 * 12 = 48\n---\n5 * 1 = 5\n5 * 2 = 10\n5 * 3 = 15\n5 * 4 = 20\n5 * 5 = 25\n5 * 6 = 30\n5 * 7 = 35\n5 * 8 = 40\n5 * 9 = 45\n5 * 10 = 50\n5 * 11 = 55\n5 * 12 = 60\n---\n6 * 1 = 6\n6 * 2 = 12\n6 * 3 = 18\n6 * 4 = 24\n6 * 5 = 30\n6 * 6 = 36\n6 * 7 = 42\n6 * 8 = 48\n6 * 9 = 54\n6 * 10 = 60\n6 * 11 = 66\n6 * 12 = 72\n---\n7 * 1 = 7\n7 * 2 = 14\n7 * 3 = 21\n7 * 4 = 28\n7 * 5 = 35\n7 * 6 = 42\n7 * 7 = 49\n7 * 8 = 56\n7 * 9 = 63\n7 * 10 = 70\n7 * 11 = 77\n7 * 12 = 84\n---\n8 * 1 = 8\n8 * 2 = 16\n8 * 3 = 24\n8 * 4 = 32\n8 * 5 = 40", "type": "stdout" }, { - "text": "\n8 * 1 = 8\n8 * 2 = 16\n8 * 3 = 24\n8 * 4 = 32\n8 * 5 = 40\n8 * 6 = 48\n8 * 7 = 56\n8 * 8 = 64\n8 * 9 = 72\n8 * 10 = 80\n8 * 11 = 88\n8 * 12 = 96\n----------\n9 * 1 = 9\n9 * 2 = 18\n9 * 3 = 27\n9 * 4 = 36\n9 * 5 = 45\n9 * 6 = 54\n9 * 7 = 63\n9 * 8 = 72\n9 * 9 = 81\n9 * 10 = 90\n9 * 11 = 99\n9 * 12 = 108\n----------\n10 * 1 = 10\n10 * 2 = 20\n10 * 3 = 30\n10 * 4 = 40\n10 * 5 = 50\n10 * 6 = 60\n10 * 7 = 70\n10 * 8 = 80\n10 * 9 = 90\n10 * 10 = 100\n10 * 11 = 110\n10 * 12 = 120\n----------\n11 * 1 = 11\n11 * 2 = 22\n11 * 3 = 33\n11 * 4 = 44\n11 * 5 = 55\n11 * 6 = 66\n11 * 7 = 77\n11 * 8 = 88\n11 * 9 = 99\n11 * 10 = 110\n11 * 11 = 121\n11 * 12 = 132\n----------\n12 * 1 = 12\n12 * 2 = 24\n12 * 3 = 36\n12 * 4 = 48\n12 * 5 = 60\n12 * 6 = 72\n12 * 7 = 84\n12 * 8 = 96\n12 * 9 = 108\n12 * 10 = 120\n12 * 11 = 132\n12 * 12 = 144\n----------\n", + "text": "\n8 * 6 = 48\n8 * 7 = 56\n8 * 8 = 64\n8 * 9 = 72\n8 * 10 = 80\n8 * 11 = 88\n8 * 12 = 96\n---\n9 * 1 = 9\n9 * 2 = 18\n9 * 3 = 27\n9 * 4 = 36\n9 * 5 = 45\n9 * 6 = 54\n9 * 7 = 63\n9 * 8 = 72\n9 * 9 = 81\n9 * 10 = 90\n9 * 11 = 99\n9 * 12 = 108\n---\n10 * 1 = 10\n10 * 2 = 20\n10 * 3 = 30\n10 * 4 = 40\n10 * 5 = 50\n10 * 6 = 60\n10 * 7 = 70\n10 * 8 = 80\n10 * 9 = 90\n10 * 10 = 100\n10 * 11 = 110\n10 * 12 = 120\n---\n11 * 1 = 11\n11 * 2 = 22\n11 * 3 = 33\n11 * 4 = 44\n11 * 5 = 55\n11 * 6 = 66\n11 * 7 = 77\n11 * 8 = 88\n11 * 9 = 99\n11 * 10 = 110\n11 * 11 = 121\n11 * 12 = 132\n---\n12 * 1 = 12\n12 * 2 = 24\n12 * 3 = 36\n12 * 4 = 48\n12 * 5 = 60\n12 * 6 = 72\n12 * 7 = 84\n12 * 8 = 96\n12 * 9 = 108\n12 * 10 = 120\n12 * 11 = 132\n12 * 12 = 144\n---\n", "type": "stdout" } ] @@ -4473,7 +4254,8 @@ "passed": false, "result": [ { - "text": " 3 x 4\n ^\nSyntaxError: invalid syntax\nat line 2\n\nA `SyntaxError` occurs when Python cannot understand your code.\n\nCurrently, I cannot guess the likely cause of this error.\nTry to examine closely the line indicated as well as the line\nimmediately above to see if you can identify some misspelled\nword, or missing symbols, like (, ), [, ], :, etc.\n\nUnless your code uses type annotations, which are beyond our scope,\nif you think that this is something which should be handled\nby friendly, please report this case to\nhttps://github.com/aroberge/friendly/issues\n\n\n\n", + "friendly": "

A SyntaxError occurs when Python cannot understand your code.

\n

Currently, I cannot guess the likely cause of this error.\nTry to examine closely the line indicated as well as the line\nimmediately above to see if you can identify some misspelled\nword, or missing symbols, like (, ), [, ], :, etc.

\n

Unless your code uses type annotations, which are beyond our scope,\nif you think that this is something which should be handled\nby friendly, please report this case to\nhttps://github.com/friendly-traceback/friendly-traceback/issues

", + "text": " 3 x 4\n ^\nSyntaxError: invalid syntax\nat line 2\n", "type": "syntax_error" } ] @@ -4481,14 +4263,7 @@ "step": "times_table_exercise" }, { - "get_solution": [ - "for left in range(12):", - " left += 1", - " for right in range(12):", - " right += 1", - " print(f'{left} x {right} = {left * right}')", - " print('----------')" - ], + "get_solution": "program", "page": "Introducing Nested Loops", "program": [ "for left in range(12):", @@ -4496,18 +4271,17 @@ " for right in range(12):", " right += 1", " print(f'{left} x {right} = {left * right}')", - " print('----------')" + " print('---')" ], "response": { - "message": "", "passed": true, "result": [ { - "text": "1 x 1 = 1\n1 x 2 = 2\n1 x 3 = 3\n1 x 4 = 4\n1 x 5 = 5\n1 x 6 = 6\n1 x 7 = 7\n1 x 8 = 8\n1 x 9 = 9\n1 x 10 = 10\n1 x 11 = 11\n1 x 12 = 12\n----------\n2 x 1 = 2\n2 x 2 = 4\n2 x 3 = 6\n2 x 4 = 8\n2 x 5 = 10\n2 x 6 = 12\n2 x 7 = 14\n2 x 8 = 16\n2 x 9 = 18\n2 x 10 = 20\n2 x 11 = 22\n2 x 12 = 24\n----------\n3 x 1 = 3\n3 x 2 = 6\n3 x 3 = 9\n3 x 4 = 12\n3 x 5 = 15\n3 x 6 = 18\n3 x 7 = 21\n3 x 8 = 24\n3 x 9 = 27\n3 x 10 = 30\n3 x 11 = 33\n3 x 12 = 36\n----------\n4 x 1 = 4\n4 x 2 = 8\n4 x 3 = 12\n4 x 4 = 16\n4 x 5 = 20\n4 x 6 = 24\n4 x 7 = 28\n4 x 8 = 32\n4 x 9 = 36\n4 x 10 = 40\n4 x 11 = 44\n4 x 12 = 48\n----------\n5 x 1 = 5\n5 x 2 = 10\n5 x 3 = 15\n5 x 4 = 20\n5 x 5 = 25\n5 x 6 = 30\n5 x 7 = 35\n5 x 8 = 40\n5 x 9 = 45\n5 x 10 = 50\n5 x 11 = 55\n5 x 12 = 60\n----------\n6 x 1 = 6\n6 x 2 = 12\n6 x 3 = 18\n6 x 4 = 24\n6 x 5 = 30\n6 x 6 = 36\n6 x 7 = 42\n6 x 8 = 48\n6 x 9 = 54\n6 x 10 = 60\n6 x 11 = 66\n6 x 12 = 72\n----------\n7 x 1 = 7\n7 x 2 = 14\n7 x 3 = 21\n7 x 4 = 28\n7 x 5 = 35\n7 x 6 = 42\n7 x 7 = 49\n7 x 8 = 56\n7 x 9 = 63\n7 x 10 = 70\n7 x 11 = 77\n7 x 12 = 84\n----------", + "text": "1 x 1 = 1\n1 x 2 = 2\n1 x 3 = 3\n1 x 4 = 4\n1 x 5 = 5\n1 x 6 = 6\n1 x 7 = 7\n1 x 8 = 8\n1 x 9 = 9\n1 x 10 = 10\n1 x 11 = 11\n1 x 12 = 12\n---\n2 x 1 = 2\n2 x 2 = 4\n2 x 3 = 6\n2 x 4 = 8\n2 x 5 = 10\n2 x 6 = 12\n2 x 7 = 14\n2 x 8 = 16\n2 x 9 = 18\n2 x 10 = 20\n2 x 11 = 22\n2 x 12 = 24\n---\n3 x 1 = 3\n3 x 2 = 6\n3 x 3 = 9\n3 x 4 = 12\n3 x 5 = 15\n3 x 6 = 18\n3 x 7 = 21\n3 x 8 = 24\n3 x 9 = 27\n3 x 10 = 30\n3 x 11 = 33\n3 x 12 = 36\n---\n4 x 1 = 4\n4 x 2 = 8\n4 x 3 = 12\n4 x 4 = 16\n4 x 5 = 20\n4 x 6 = 24\n4 x 7 = 28\n4 x 8 = 32\n4 x 9 = 36\n4 x 10 = 40\n4 x 11 = 44\n4 x 12 = 48\n---\n5 x 1 = 5\n5 x 2 = 10\n5 x 3 = 15\n5 x 4 = 20\n5 x 5 = 25\n5 x 6 = 30\n5 x 7 = 35\n5 x 8 = 40\n5 x 9 = 45\n5 x 10 = 50\n5 x 11 = 55\n5 x 12 = 60\n---\n6 x 1 = 6\n6 x 2 = 12\n6 x 3 = 18\n6 x 4 = 24\n6 x 5 = 30\n6 x 6 = 36\n6 x 7 = 42\n6 x 8 = 48\n6 x 9 = 54\n6 x 10 = 60\n6 x 11 = 66\n6 x 12 = 72\n---\n7 x 1 = 7\n7 x 2 = 14\n7 x 3 = 21\n7 x 4 = 28\n7 x 5 = 35\n7 x 6 = 42\n7 x 7 = 49\n7 x 8 = 56\n7 x 9 = 63\n7 x 10 = 70\n7 x 11 = 77\n7 x 12 = 84\n---\n8 x 1 = 8\n8 x 2 = 16\n8 x 3 = 24\n8 x 4 = 32\n8 x 5 = 40", "type": "stdout" }, { - "text": "\n8 x 1 = 8\n8 x 2 = 16\n8 x 3 = 24\n8 x 4 = 32\n8 x 5 = 40\n8 x 6 = 48\n8 x 7 = 56\n8 x 8 = 64\n8 x 9 = 72\n8 x 10 = 80\n8 x 11 = 88\n8 x 12 = 96\n----------\n9 x 1 = 9\n9 x 2 = 18\n9 x 3 = 27\n9 x 4 = 36\n9 x 5 = 45\n9 x 6 = 54\n9 x 7 = 63\n9 x 8 = 72\n9 x 9 = 81\n9 x 10 = 90\n9 x 11 = 99\n9 x 12 = 108\n----------\n10 x 1 = 10\n10 x 2 = 20\n10 x 3 = 30\n10 x 4 = 40\n10 x 5 = 50\n10 x 6 = 60\n10 x 7 = 70\n10 x 8 = 80\n10 x 9 = 90\n10 x 10 = 100\n10 x 11 = 110\n10 x 12 = 120\n----------\n11 x 1 = 11\n11 x 2 = 22\n11 x 3 = 33\n11 x 4 = 44\n11 x 5 = 55\n11 x 6 = 66\n11 x 7 = 77\n11 x 8 = 88\n11 x 9 = 99\n11 x 10 = 110\n11 x 11 = 121\n11 x 12 = 132\n----------\n12 x 1 = 12\n12 x 2 = 24\n12 x 3 = 36\n12 x 4 = 48\n12 x 5 = 60\n12 x 6 = 72\n12 x 7 = 84\n12 x 8 = 96\n12 x 9 = 108\n12 x 10 = 120\n12 x 11 = 132\n12 x 12 = 144\n----------\n", + "text": "\n8 x 6 = 48\n8 x 7 = 56\n8 x 8 = 64\n8 x 9 = 72\n8 x 10 = 80\n8 x 11 = 88\n8 x 12 = 96\n---\n9 x 1 = 9\n9 x 2 = 18\n9 x 3 = 27\n9 x 4 = 36\n9 x 5 = 45\n9 x 6 = 54\n9 x 7 = 63\n9 x 8 = 72\n9 x 9 = 81\n9 x 10 = 90\n9 x 11 = 99\n9 x 12 = 108\n---\n10 x 1 = 10\n10 x 2 = 20\n10 x 3 = 30\n10 x 4 = 40\n10 x 5 = 50\n10 x 6 = 60\n10 x 7 = 70\n10 x 8 = 80\n10 x 9 = 90\n10 x 10 = 100\n10 x 11 = 110\n10 x 12 = 120\n---\n11 x 1 = 11\n11 x 2 = 22\n11 x 3 = 33\n11 x 4 = 44\n11 x 5 = 55\n11 x 6 = 66\n11 x 7 = 77\n11 x 8 = 88\n11 x 9 = 99\n11 x 10 = 110\n11 x 11 = 121\n11 x 12 = 132\n---\n12 x 1 = 12\n12 x 2 = 24\n12 x 3 = 36\n12 x 4 = 48\n12 x 5 = 60\n12 x 6 = 72\n12 x 7 = 84\n12 x 8 = 96\n12 x 9 = 108\n12 x 10 = 120\n12 x 11 = 132\n12 x 12 = 144\n---\n", "type": "stdout" } ] @@ -4530,7 +4304,6 @@ " print(f'{player1} vs {player2}')" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4559,7 +4332,6 @@ " print(c1 + c2 + c3 + c4)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4590,7 +4362,6 @@ " print(line)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4617,7 +4388,6 @@ " print(f'{players[i]} vs {players[j]}')" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4629,6 +4399,7 @@ "step": "player_vs_player_bonus" }, { + "get_solution": "program", "page": "Understanding Programs with birdseye", "program": [ "a = 2", @@ -4638,7 +4409,6 @@ "print(a * b + c * d)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4650,6 +4420,7 @@ "step": "first_birdseye_example" }, { + "get_solution": "program", "page": "Understanding Programs with birdseye", "program": [ "word = 'Amazing'", @@ -4664,7 +4435,6 @@ "print(consonants)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4687,7 +4457,6 @@ "print(string[0])" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4699,13 +4468,13 @@ "step": "string_list_exercise" }, { + "get_solution": "program", "page": "Introducing Nested Lists", "program": [ "strings = [\"abc\", \"def\", \"ghi\"]", "print(strings[1][0])" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4726,7 +4495,6 @@ "print(strings[-2][-1])" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4738,13 +4506,13 @@ "step": "double_subscripting_exercise" }, { + "get_solution": "program", "page": "Introducing Nested Lists", "program": [ "strings = [['hello', 'there'], ['how', 'are', 'you']]", "print(strings[1][0])" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "how", @@ -4760,7 +4528,7 @@ "t", "e", "a", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -4782,7 +4550,6 @@ "print(strings[1][2][0])" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4794,6 +4561,7 @@ "step": "triple_subscripting" }, { + "get_solution": "program", "page": "Looping Over Nested Lists", "program": [ "numbers = [[1, 2, 3], [4, 5], [6], []]", @@ -4803,7 +4571,6 @@ " print('---')" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "1\n2\n3\n---\n4\n5\n---\n6\n---\n---", @@ -4813,7 +4580,7 @@ "1\n2\n3\n---\n4\n5\n---\n6\n---", "1 2 3\n---\n4 5\n---\n6\n---\n---", "1 2 3\n---\n4 5\n---\n6\n---", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -4826,6 +4593,7 @@ "step": "nested_list_nested_loop_example" }, { + "get_solution": "program", "page": "Looping Over Nested Lists", "program": [ "numbers = [[1, 2, 3], [4, 5], [6], []]", @@ -4835,7 +4603,6 @@ " print('---')" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4863,7 +4630,6 @@ " print(string)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4895,7 +4661,6 @@ " print(present)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4927,7 +4692,6 @@ "print(present)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -4956,7 +4720,6 @@ " print(line)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -5001,7 +4764,6 @@ " print(line)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -5013,6 +4775,7 @@ "step": "zip_longest_strings_exercise" }, { + "get_solution": "program", "page": "Defining Functions", "program": [ "def greet(name):", @@ -5022,7 +4785,6 @@ "greet(\"Bob\")" ], "response": { - "message": "", "passed": true, "result": [ { @@ -5034,6 +4796,7 @@ "step": "define_greet" }, { + "get_solution": "program", "page": "Defining Functions", "program": [ "def greet(name):", @@ -5044,7 +4807,6 @@ "greet(\"Bob\")" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "Hello Alice!\nHow are you?\nHello Bob!\nHow are you?", @@ -5052,7 +4814,7 @@ "Hello Alice!\nHow are you?\nHello Bob!\nHow are you?", "Hello Alice!\nHello Bob!\nHow are you?", "Hello Alice!\nHow are you?\nHello Bob!", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -5065,14 +4827,7 @@ "step": "how_are_you" }, { - "get_solution": [ - "def say_hello(name):", - " print(f\"Hello {name}!\")", - " print(\"How are you?\")", - "", - "say_hello(\"Alice\")", - "say_hello(\"Bob\")" - ], + "get_solution": "program", "page": "Defining Functions", "program": [ "def say_hello(name):", @@ -5083,7 +4838,6 @@ "say_hello(\"Bob\")" ], "response": { - "message": "", "passed": true, "result": [ { @@ -5095,14 +4849,7 @@ "step": "change_function_name" }, { - "get_solution": [ - "def say_hello(person_name):", - " print(f\"Hello {person_name}!\")", - " print(\"How are you?\")", - "", - "say_hello(\"Alice\")", - "say_hello(\"Bob\")" - ], + "get_solution": "program", "page": "Defining Functions", "program": [ "def say_hello(person_name):", @@ -5113,7 +4860,6 @@ "say_hello(\"Bob\")" ], "response": { - "message": "", "passed": true, "result": [ { @@ -5125,11 +4871,7 @@ "step": "change_parameter_name" }, { - "get_solution": [ - "def print_twice(x):", - " print(x)", - " print(x)" - ], + "get_solution": "program", "page": "Defining Functions", "program": [ "def print_twice(x):", @@ -5137,13 +4879,13 @@ " print(x)" ], "response": { - "message": "", "passed": true, "result": [] }, "step": "print_twice_exercise" }, { + "get_solution": "program", "page": "Defining Functions", "program": [ "def print_many(thing, n):", @@ -5153,7 +4895,6 @@ "print_many(\"Hello\", 3)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "Hello\nHello\nHello", @@ -5163,7 +4904,7 @@ "Hello\nHello\nHello", "Hello", "H\ne\nl\nl\no", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -5176,13 +4917,7 @@ "step": "print_many" }, { - "get_solution": [ - "def print_many(n, thing):", - " for _ in range(n):", - " print(thing)", - "", - "print_many(3, \"Hello\")" - ], + "get_solution": "program", "page": "Defining Functions", "program": [ "def print_many(n, thing):", @@ -5192,7 +4927,6 @@ "print_many(3, \"Hello\")" ], "response": { - "message": "", "passed": true, "result": [ { @@ -5204,7 +4938,8 @@ "step": "swap_parameters" }, { - "page": "Calling Functions Within Functions", + "get_solution": "program", + "page": "\u5728\u51fd\u6570\u4e2d\u8c03\u7528\u51fd\u6570", "program": [ "def print_many(n, thing):", " for _ in range(n):", @@ -5216,7 +4951,6 @@ "print_twice(\"Hello\")" ], "response": { - "message": "", "passed": true, "result": [ { @@ -5228,7 +4962,8 @@ "step": "print_twice_call_print_many" }, { - "page": "Calling Functions Within Functions", + "get_solution": "program", + "page": "\u5728\u51fd\u6570\u4e2d\u8c03\u7528\u51fd\u6570", "program": [ "def print_many(n, thing):", " for _ in range(n):", @@ -5240,83 +4975,55 @@ "print_twice(\"Hello\")" ], "response": { - "message": "", "passed": true, "result": [ { - "text": "", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 1\u001b[0m | \u001b[38;5;81mdef\u001b[39m \u001b[38;5;148mprint_many\u001b[39m(n, thing):\n", - "type": "stdout" + "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 1\u001b[0m | \u001b[38;5;81mdef\u001b[39m \u001b[38;5;148mprint_many\u001b[39m(n, thing):\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mdef\u001b[39m \u001b[38;5;148mprint_twice\u001b[39m(x):\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | print_twice(\u001b[38;5;186m\"\u001b[39m\u001b[38;5;186mHello\u001b[39m\u001b[38;5;186m\"\u001b[39m)\n\u001b[38;5;242m \u001b[0m\u001b[36m\u001b[1m>>> Call to print_twice in File \"/my_program.py\", line 5\u001b[0m\n\u001b[38;5;242m \u001b[0m...... x = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mHello\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mdef\u001b[39m \u001b[38;5;148mprint_twice\u001b[39m(x):\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | print_many(\u001b[38;5;141m2\u001b[39m, x)\n\u001b[38;5;242m \u001b[0m\u001b[36m\u001b[1m>>> Call to print_many in File \"/my_program.py\", line 1\u001b[0m\n\u001b[38;5;242m \u001b[0m...... n = \u001b[38;5;141m2\u001b[39m\n\u001b[38;5;242m \u001b[0m...... thing = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mHello\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 1\u001b[0m | \u001b[38;5;81mdef\u001b[39m \u001b[38;5;148mprint_many\u001b[39m(n, thing):\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 2\u001b[0m | \u001b[38;5;81mfor\u001b[39m _ \u001b[38;5;197min\u001b[39m range(n):\n", + "type": "snoop" }, { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mdef\u001b[39m \u001b[38;5;148mprint_twice\u001b[39m(x):\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | print_twice(\u001b[38;5;186m\"\u001b[39m\u001b[38;5;186mHello\u001b[39m\u001b[38;5;186m\"\u001b[39m)\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[36m\u001b[1m>>> Call to print_twice in File \"my_program.py\", line 5\u001b[0m\n\u001b[38;5;242m \u001b[0m...... x = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mHello\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 5\u001b[0m | \u001b[38;5;81mdef\u001b[39m \u001b[38;5;148mprint_twice\u001b[39m(x):\n", - "type": "stdout" + "text": "\u001b[38;5;242m \u001b[0m.......... _ = \u001b[38;5;141m0\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 3\u001b[0m | print(thing)\n", + "type": "snoop" }, { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | print_many(\u001b[38;5;141m2\u001b[39m, x)\n", + "text": "Hello", "type": "stdout" }, { - "text": "\u001b[38;5;242m \u001b[0m\u001b[36m\u001b[1m>>> Call to print_many in File \"my_program.py\", line 1\u001b[0m\n\u001b[38;5;242m \u001b[0m...... n = \u001b[38;5;141m2\u001b[39m\n\u001b[38;5;242m \u001b[0m...... thing = \u001b[38;5;186m'\u001b[39m\u001b[38;5;186mHello\u001b[39m\u001b[38;5;186m'\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 1\u001b[0m | \u001b[38;5;81mdef\u001b[39m \u001b[38;5;148mprint_many\u001b[39m(n, thing):\n", + "text": "\n", "type": "stdout" }, { "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 2\u001b[0m | \u001b[38;5;81mfor\u001b[39m _ \u001b[38;5;197min\u001b[39m range(n):\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m.......... _ = \u001b[38;5;141m0\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 3\u001b[0m | print(thing)\n", - "type": "stdout" - }, - { - "text": "Hello\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 2\u001b[0m | \u001b[38;5;81mfor\u001b[39m _ \u001b[38;5;197min\u001b[39m range(n):\n", - "type": "stdout" + "type": "snoop" }, { "text": "\u001b[38;5;242m \u001b[0m.......... _ = \u001b[38;5;141m1\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 3\u001b[0m | print(thing)\n", - "type": "stdout" + "type": "snoop" }, { - "text": "Hello\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 2\u001b[0m | \u001b[38;5;81mfor\u001b[39m _ \u001b[38;5;197min\u001b[39m range(n):\n", + "text": "Hello", "type": "stdout" }, { - "text": "\u001b[38;5;242m \u001b[0m\u001b[32m\u001b[1m<<< Return value from print_many: \u001b[0m\u001b[38;5;81mNone\u001b[39m\n", + "text": "\n", "type": "stdout" }, { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | print_many(\u001b[38;5;141m2\u001b[39m, x)\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[32m\u001b[1m<<< Return value from print_twice: \u001b[0m\u001b[38;5;81mNone\u001b[39m\n", - "type": "stdout" - }, - { - "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | print_twice(\u001b[38;5;186m\"\u001b[39m\u001b[38;5;186mHello\u001b[39m\u001b[38;5;186m\"\u001b[39m)\n", - "type": "stdout" + "text": "\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 2\u001b[0m | \u001b[38;5;81mfor\u001b[39m _ \u001b[38;5;197min\u001b[39m range(n):\n", + "type": "snoop" }, { - "text": "", - "type": "stdout" + "text": "\u001b[38;5;242m \u001b[0m\u001b[32m\u001b[1m<<< Return value from print_many: \u001b[0m\u001b[38;5;81mNone\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 6\u001b[0m | print_many(\u001b[38;5;141m2\u001b[39m, x)\n\u001b[38;5;242m \u001b[0m\u001b[32m\u001b[1m<<< Return value from print_twice: \u001b[0m\u001b[38;5;81mNone\u001b[39m\n\u001b[38;5;242m \u001b[0m\u001b[38;5;242m 8\u001b[0m | print_twice(\u001b[38;5;186m\"\u001b[39m\u001b[38;5;186mHello\u001b[39m\u001b[38;5;186m\"\u001b[39m)\n", + "type": "snoop" } ] }, "step": "see_stack_in_snoop" }, { - "page": "Calling Functions Within Functions", + "get_solution": "program", + "page": "\u5728\u51fd\u6570\u4e2d\u8c03\u7528\u51fd\u6570", "program": [ "def print_many(n, thing):", " for _ in range(n):", @@ -5328,7 +5035,6 @@ "print_twice(\"Hello\")" ], "response": { - "message": "", "passed": true, "result": [ { @@ -5340,7 +5046,8 @@ "step": "see_stack_in_pythontutor" }, { - "page": "Calling Functions Within Functions", + "get_solution": "program", + "page": "\u5728\u51fd\u6570\u4e2d\u8c03\u7528\u51fd\u6570", "program": [ "def print_many(n, thing):", " for _ in range(n):", @@ -5352,7 +5059,6 @@ "print_twice(\"Hello\")" ], "response": { - "message": "", "passed": true, "result": [ { @@ -5364,6 +5070,7 @@ "step": "see_stack_in_birdseye" }, { + "get_solution": "program", "page": "Returning Values From Functions", "program": [ "def double(x):", @@ -5375,7 +5082,6 @@ "print(twice)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "5\n10", @@ -5383,7 +5089,7 @@ "5\n5", "5\n10", "10\n10", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -5396,6 +5102,7 @@ "step": "first_return" }, { + "get_solution": "program", "page": "Returning Values From Functions", "program": [ "def double(x):", @@ -5406,14 +5113,13 @@ "print(number)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "5", "choices": [ "5", "10", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -5452,13 +5158,13 @@ " return double(double(x))" ], "response": { - "message": "", "passed": true, "result": [] }, "step": "quadruple_exercise" }, { + "get_solution": "program", "page": "Testing Functions", "program": [ "def double(x):", @@ -5468,7 +5174,6 @@ "assert_equal(double(5), 10)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "OK\nOK", @@ -5478,7 +5183,7 @@ "Error! 2 != 4", "OK\nOK", "OK", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -5491,6 +5196,7 @@ "step": "introducing_assert_equal" }, { + "get_solution": "program", "page": "Testing Functions", "program": [ "def double(x):", @@ -5500,7 +5206,6 @@ "assert_equal(double(5), 10)" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "Error! 6 != 4\nError! 15 != 10", @@ -5509,7 +5214,7 @@ "Error! 6 != 4\nError! 15 != 10", "Error! 4 != 6\nError! 10 != 15", "OK\nOK", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -5522,6 +5227,7 @@ "step": "make_tests_fail" }, { + "get_solution": "program", "page": "Testing Functions", "program": [ "def double(x):", @@ -5534,7 +5240,6 @@ "assert_equal(quadruple(5), 20)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -5546,17 +5251,13 @@ "step": "complete_quadruple_tests" }, { - "get_solution": [ - "def surround(string, sides):", - " return sides + string + sides" - ], + "get_solution": "program", "page": "Testing Functions", "program": [ "def surround(string, sides):", " return sides + string + sides" ], "response": { - "message": "", "passed": true, "result": [] }, @@ -5615,13 +5316,13 @@ " return string" ], "response": { - "message": "", "passed": true, "result": [] }, "step": "alert_exercise" }, { + "get_solution": "program", "page": "return ends the function call", "program": [ "def foo():", @@ -5631,7 +5332,6 @@ "print(foo())" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "1", @@ -5641,7 +5341,7 @@ "[1, 2]", "1\n2", "1 2", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -5654,6 +5354,7 @@ "step": "double_return_in_one_function" }, { + "get_solution": "program", "page": "return ends the function call", "program": [ "def double_numbers(numbers):", @@ -5663,7 +5364,6 @@ "assert_equal(double_numbers([1, 2, 3]), [2, 4, 6])" ], "response": { - "message": "", "passed": true, "result": [ { @@ -5675,6 +5375,7 @@ "step": "cannot_return_multiple_values" }, { + "get_solution": "program", "page": "return ends the function call", "program": [ "def foo():", @@ -5687,7 +5388,6 @@ "foo()" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "a 0\na 1\na 2\nb 0", @@ -5697,7 +5397,7 @@ "a 0\na 1\na 2\nb 0\nb 1\nb 2", "a 0\na 1\na 2\nb 0\nc 0\nc 1\nc 2", "a 0\na 1\na 2\nb 0\nb 1\nb 2\nc 0\nc 1\nc 2", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -5710,6 +5410,7 @@ "step": "return_ends_whole_function" }, { + "get_solution": "program", "page": "return ends the function call", "program": [ "def foo():", @@ -5722,7 +5423,6 @@ "foo()" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "a 0\na 1\na 2\nb 0\nc 0\nc 1\nc 2", @@ -5732,7 +5432,7 @@ "a 0\na 1\na 2\nb 0\nb 1\nb 2", "a 0\na 1\na 2\nb 0\nc 0\nc 1\nc 2", "a 0\na 1\na 2\nb 0\nb 1\nb 2\nc 0\nc 1\nc 2", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -5745,6 +5445,7 @@ "step": "break_vs_return" }, { + "get_solution": "program", "page": "Introducing or", "program": [ "def is_friend(name):", @@ -5760,7 +5461,6 @@ "assert_equal(is_friend(\"Charlie\"), False)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -5772,19 +5472,19 @@ "step": "InputAliceBob" }, { + "get_solution": "program", "page": "Introducing or", "program": [ "True or True" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "True", "choices": [ "True", "False", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -5797,19 +5497,19 @@ "step": "TrueOrTrue" }, { + "get_solution": "program", "page": "Introducing or", "program": [ "True or False" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "True", "choices": [ "True", "False", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -5822,19 +5522,19 @@ "step": "TrueOrFalse" }, { + "get_solution": "program", "page": "Introducing or", "program": [ "False or False" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "False", "choices": [ "True", "False", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -5847,6 +5547,7 @@ "step": "FalseOrFalse" }, { + "get_solution": "program", "page": "Introducing or", "program": [ "def is_friend(name):", @@ -5860,7 +5561,6 @@ "assert_equal(is_friend(\"Charlie\"), False)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -5872,6 +5572,7 @@ "step": "ImprovingWithOr" }, { + "get_solution": "program", "page": "Introducing or", "program": [ "def is_friend(name):", @@ -5882,7 +5583,6 @@ "assert_equal(is_friend(\"Charlie\"), False)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -5894,6 +5594,7 @@ "step": "FurtherImprovement" }, { + "get_solution": "program", "page": "Introducing or", "program": [ "def is_friend(name):", @@ -5904,7 +5605,6 @@ "assert_equal(is_friend(\"Charlie\"), False)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -5916,6 +5616,7 @@ "step": "ACommonMistake" }, { + "get_solution": "program", "page": "Introducing or", "program": [ "def is_friend(name):", @@ -5926,7 +5627,6 @@ "assert_equal(is_friend(\"Charlie\"), False)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -5938,13 +5638,7 @@ "step": "InspectWithBirdseye" }, { - "get_solution": [ - "def is_valid_percentage(x):", - " if x < 0 or x > 100:", - " return False", - " else:", - " return True" - ], + "get_solution": "program", "page": "Introducing or", "program": [ "def is_valid_percentage(x):", @@ -5954,26 +5648,25 @@ " return True" ], "response": { - "message": "", "passed": true, "result": [] }, "step": "AnExercise" }, { + "get_solution": "program", "page": "Introducing and", "program": [ "True and True" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "True", "choices": [ "True", "False", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -5986,19 +5679,19 @@ "step": "TrueAndTrue" }, { + "get_solution": "program", "page": "Introducing and", "program": [ "True and False" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "False", "choices": [ "True", "False", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -6011,19 +5704,19 @@ "step": "TrueAndFalse" }, { + "get_solution": "program", "page": "Introducing and", "program": [ "False and False" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "False", "choices": [ "True", "False", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -6036,13 +5729,7 @@ "step": "FalseAndFalse" }, { - "get_solution": [ - "def is_valid_percentage(x):", - " if 0 <= x and x <= 100:", - " return True", - " else:", - " return False" - ], + "get_solution": "program", "page": "Introducing and", "program": [ "def is_valid_percentage(x):", @@ -6052,41 +5739,37 @@ " return False" ], "response": { - "message": "", "passed": true, "result": [] }, "step": "AndExercise" }, { - "get_solution": [ - "def all_equal(row):", - " return row[0] == row[1] and row[0] == row[2]" - ], + "get_solution": "program", "page": "Introducing and", "program": [ "def all_equal(row):", " return row[0] == row[1] and row[0] == row[2]" ], "response": { - "message": "", "passed": true, "result": [] }, "step": "TicTacToeWinningRow" }, { + "get_solution": "program", "page": "Multi-line statements", "program": [ "is_friend = name == \"Alice\" or", " name == \"Bob\"" ], "response": { - "message": "", "passed": true, "result": [ { - "text": " is_friend = name == \"Alice\" or\n ^\nSyntaxError: invalid syntax\nat line 1\n\nA `SyntaxError` occurs when Python cannot understand your code.\n\nThe Python keyword `or` can only be used for boolean expressions.\nPerhaps you meant to write\n\n`is_friend = name == \"Alice\" ,`\n\n\n", + "friendly": "

A SyntaxError occurs when Python cannot understand your code.

\n

The Python keyword or can only be used for boolean expressions.\nPerhaps you meant to write

\n

is_friend = name == \"Alice\" ,

", + "text": " is_friend = name == \"Alice\" or\n ^\nSyntaxError: invalid syntax\nat line 1\n", "type": "syntax_error" } ] @@ -6094,6 +5777,7 @@ "step": "invalid_multiline" }, { + "get_solution": "program", "page": "Multi-line statements", "program": [ "name = \"Bob\"", @@ -6114,7 +5798,6 @@ " name == \"Bob\")" ], "response": { - "message": "", "passed": true, "result": [ { @@ -6126,12 +5809,12 @@ "step": "valid_multiline" }, { - "page": "Combining and and or", + "get_solution": "program", + "page": "\u540c\u65f6\u4f7f\u7528 and \u548c or", "program": [ "True or False and False" ], "response": { - "message": "", "passed": true, "result": [ { @@ -6143,15 +5826,8 @@ "step": "CombiningAndOr" }, { - "get_solution": [ - "def diagonal_winner(board):", - " middle = board[1][1]", - " return (", - " (middle == board[0][0] and middle == board[2][2]) or", - " (middle == board[0][2] and middle == board[2][0])", - " )" - ], - "page": "Combining and and or", + "get_solution": "program", + "page": "\u540c\u65f6\u4f7f\u7528 and \u548c or", "program": [ "def diagonal_winner(board):", " middle = board[1][1]", @@ -6161,26 +5837,25 @@ " )" ], "response": { - "message": "", "passed": true, "result": [] }, "step": "AndHasHigherPriority" }, { + "get_solution": "program", "page": "Introducing not", "program": [ "not True" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "False", "choices": [ "True", "False", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -6193,19 +5868,19 @@ "step": "IntroducingNot" }, { + "get_solution": "program", "page": "Introducing not", "program": [ "not False" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "True", "choices": [ "True", "False", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -6218,13 +5893,13 @@ "step": "NotFalse" }, { + "get_solution": "program", "page": "Introducing not", "program": [ "b = True", "print(not b or b)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -6236,17 +5911,13 @@ "step": "NotTrueOrTrue" }, { - "get_solution": [ - "def invalid_image(filename):", - " return not (filename.endswith(\".png\") or filename.endswith(\".jpg\"))" - ], + "get_solution": "program", "page": "Introducing not", "program": [ "def invalid_image(filename):", " return not (filename.endswith(\".png\") or filename.endswith(\".jpg\"))" ], "response": { - "message": "", "passed": true, "result": [] }, @@ -6275,19 +5946,7 @@ "step": "intro_row_winner" }, { - "get_solution": [ - "def row_winner(board):", - " for row in board:", - " all_equal = True", - " piece = row[0]", - " for entry in row:", - " if entry == ' ' or piece != entry:", - " all_equal = False", - " break", - " if all_equal:", - " return True", - " return False" - ], + "get_solution": "program", "page": "Checking the board for winners", "program": [ "def row_winner(board):", @@ -6303,26 +5962,13 @@ " return False" ], "response": { - "message": "", "passed": true, "result": [] }, "step": "intro_row_winner" }, { - "get_solution": [ - "def column_winner(board):", - " for col in range(len(board[0])):", - " all_equal = True", - " piece = board[0][col]", - " for row in board:", - " if row[col] == ' ' or row[col] != piece:", - " all_equal = False", - " break", - " if all_equal:", - " return True", - " return False" - ], + "get_solution": "program", "page": "Checking the board for winners", "program": [ "def column_winner(board):", @@ -6338,26 +5984,13 @@ " return False" ], "response": { - "message": "", "passed": true, "result": [] }, "step": "column_winner" }, { - "get_solution": [ - "def diagonal_winner(board):", - " all_equal1 = True", - " all_equal2 = True", - " topleft = board[0][0]", - " topright = board[0][-1]", - " for i in range(len(board)):", - " if board[i][i] == ' ' or board[i][i] != topleft:", - " all_equal1 = False", - " if board[i][-i - 1] == ' ' or board[i][-i - 1] != topright:", - " all_equal2 = False", - " return all_equal1 or all_equal2" - ], + "get_solution": "program", "page": "Checking the board for winners", "program": [ "def diagonal_winner(board):", @@ -6373,7 +6006,6 @@ " return all_equal1 or all_equal2" ], "response": { - "message": "", "passed": true, "result": [] }, @@ -6422,13 +6054,13 @@ " return row_winner(board) or column_winner(board) or diagonal_winner(board)" ], "response": { - "message": "", "passed": true, "result": [] }, "step": "winner" }, { + "get_solution": "program", "page": "The newline character, format_board", "program": [ "def print_board(board):", @@ -6442,7 +6074,6 @@ "])" ], "response": { - "message": "", "passed": true, "result": [ { @@ -6454,6 +6085,7 @@ "step": "one_way_to_print_board" }, { + "get_solution": "program", "page": "The newline character, format_board", "program": [ "assert_equal(", @@ -6468,11 +6100,11 @@ ")" ], "response": { - "message": "", "passed": true, "result": [ { - "text": " \"XOX\n ^\nSyntaxError: EOL while scanning string literal\nat line 7\n\nA `SyntaxError` occurs when Python cannot understand your code.\n\nYou started writing a string with a single or double quote\nbut never ended the string with another quote on that line.\n\n\n", + "friendly": "

A SyntaxError occurs when Python cannot understand your code.

\n

You started writing a string with a single or double quote\nbut never ended the string with another quote on that line.

", + "text": " \"XOX\n ^\nSyntaxError: unterminated string literal (detected at line 7)\nat line 7\n", "type": "syntax_error" } ] @@ -6480,6 +6112,7 @@ "step": "invalid_multi_line_string" }, { + "get_solution": "program", "page": "The newline character, format_board", "program": [ "string = \"\"\"First line", @@ -6487,7 +6120,6 @@ "print(string)" ], "response": { - "message": "", "passed": true, "result": [ { @@ -6511,12 +6143,12 @@ "step": "discovering_newline" }, { + "get_solution": "program", "page": "The newline character, format_board", "program": [ "string" ], "response": { - "message": "", "passed": true, "result": [ { @@ -6528,19 +6160,19 @@ "step": "discovering_newline" }, { + "get_solution": "program", "page": "The newline character, format_board", "program": [ "len('\\n')" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "1", "choices": [ "1", "2", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -6553,16 +6185,7 @@ "step": "introducing_newline" }, { - "get_solution": [ - "def format_board(board):", - " result = ''", - " for i in range(len(board)):", - " for char in board[i]:", - " result += char", - " if i != len(board) - 1:", - " result += '\\n'", - " return result" - ], + "get_solution": "program", "page": "The newline character, format_board", "program": [ "def format_board(board):", @@ -6575,24 +6198,13 @@ " return result" ], "response": { - "message": "", "passed": true, "result": [] }, "step": "format_board_simple" }, { - "get_solution": [ - "def format_board(board):", - " joined_rows = []", - " for row in board:", - " joined_rows.append(\"|\".join(row))", - " lines = []", - " for _ in board[0]:", - " lines.append(\"-\")", - " line = f'\\n{\"+\".join(lines)}\\n'", - " return line.join(joined_rows)" - ], + "get_solution": "program", "page": "The newline character, format_board", "program": [ "def format_board(board):", @@ -6606,13 +6218,13 @@ " return line.join(joined_rows)" ], "response": { - "message": "", "passed": true, "result": [] }, "step": "format_board_bonus_challenge" }, { + "get_solution": "program", "page": "Types", "program": [ "print(type('Hello World'))", @@ -6622,7 +6234,6 @@ "print(type(4.56))" ], "response": { - "message": "", "passed": true, "result": [ { @@ -6634,12 +6245,12 @@ "step": "five_different_types" }, { + "get_solution": "program", "page": "Types", "program": [ "type(3) == int" ], "response": { - "message": "", "passed": true, "result": [ { @@ -6651,6 +6262,7 @@ "step": "check_type_manually" }, { + "get_solution": "program", "page": "Types", "program": [ "print('123')", @@ -6658,7 +6270,6 @@ "print(123 == '123')" ], "response": { - "message": "", "passed": true, "result": [ { @@ -6670,13 +6281,13 @@ "step": "different_types_look_same" }, { + "get_solution": "program", "page": "Types", "program": [ "print(123 + 456)", "print('123' + '456')" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "579\n123456", @@ -6687,7 +6298,7 @@ "123456\n'123456'", "579\n123456", "579\n'123456'", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -6700,13 +6311,13 @@ "step": "plus_has_two_meanings" }, { + "get_solution": "program", "page": "Types", "program": [ "print(13 < 120)", "print('13' < '120')" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "True\nFalse", @@ -6715,7 +6326,7 @@ "True\nFalse", "False\nTrue", "False\nFalse", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -6728,13 +6339,13 @@ "step": "less_than_has_two_meanings" }, { + "get_solution": "program", "page": "Types", "program": [ "print(sorted([120, 13, 0]))", "print(sorted(['120', '13', '0']))" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "[0, 13, 120]\n['0', '120', '13']", @@ -6745,7 +6356,7 @@ "[120, 13, 0]\n['0', '120', '13']", "[120, 13, 0]\n['13', '120', '0']", "[120, 13, 0]\n['120', '13', '0']", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -6758,21 +6369,21 @@ "step": "less_than_sorting_strings" }, { + "get_solution": "program", "page": "Types", "program": [ "12 + '34'" ], "response": { - "message": "", "passed": true, "prediction": { - "answer": "Error", + "answer": "\u9519\u8bef", "choices": [ "46", "'46'", "1234", "'1234'", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -6786,11 +6397,13 @@ }, "frames": [ { + "filename": "/my_program.py", + "lineno": 1, "lines": [ { - "content": "12 + '34'", "is_current": true, "lineno": 1, + "text": "12 + '34'", "type": "line" } ], @@ -6805,7 +6418,7 @@ ], "text": [ "Traceback (most recent call last):", - " File \"my_program.py\", line 1, in ", + " File \"/my_program.py\", line 1, in ", "--> 1 | 12 + '34'", " ^^^^^^^^^", "", @@ -6831,7 +6444,6 @@ "print('Go!')" ], "response": { - "message": "", "passed": true, "result": [ { @@ -6843,17 +6455,7 @@ "step": "fixing_type_errors_with_conversion" }, { - "get_solution": [ - "def format_board(board):", - " first_row = ' '", - " for i in range(len(board)):", - " first_row += str(i + 1)", - " joined_rows = [first_row]", - " for i in range(len(board)):", - " joined_row = str(i + 1) + ''.join(board[i])", - " joined_rows.append(joined_row)", - " return \"\\n\".join(joined_rows)" - ], + "get_solution": "program", "page": "Types", "program": [ "def format_board(board):", @@ -6867,13 +6469,13 @@ " return \"\\n\".join(joined_rows)" ], "response": { - "message": "", "passed": true, "result": [] }, "step": "format_board_with_numbers" }, { + "get_solution": "program", "page": "Interactive Programs with input()", "program": [ "print('Type your name, then press Enter:')", @@ -6881,7 +6483,6 @@ "print(f'Hello {name}!')" ], "response": { - "message": "", "passed": true, "result": [ { @@ -6906,7 +6507,6 @@ }, { "get_solution": [ - "super_secret_number = 7", "print(\"What number am I thinking of?\")", "guess = input()", "if int(guess) == super_secret_number:", @@ -6925,7 +6525,6 @@ " print(\"Nope!\")" ], "response": { - "message": "", "passed": true, "result": [ { @@ -6949,6 +6548,7 @@ "step": "convert_input_to_int" }, { + "get_solution": "program", "page": "Nested List Assignment: Playing Moves on the Board", "program": [ "def play_move(board, player):", @@ -6962,7 +6562,6 @@ "play_game()" ], "response": { - "message": "", "passed": true, "prediction": { "answer": "[' ', 'X', ' ']", @@ -6976,7 +6575,7 @@ "['X', ' ', ' ']", "[' ', 'X', ' ']", "[' ', ' ', 'X']", - "Error" + "\u9519\u8bef" ] }, "result": [ @@ -6989,6 +6588,7 @@ "step": "modify_list_in_function" }, { + "get_solution": "program", "page": "Nested List Assignment: Playing Moves on the Board", "program": [ "def play_move(board, player):", @@ -7007,7 +6607,6 @@ "play_game()" ], "response": { - "message": "", "passed": true, "result": [ { @@ -7019,12 +6618,7 @@ "step": "nested_assignment_two_lines" }, { - "get_solution": [ - "def play_move(board, player):", - " row = int(input()) - 1", - " col = int(input()) - 1", - " board[row][col] = player" - ], + "get_solution": "program", "page": "Nested List Assignment: Playing Moves on the Board", "program": [ "def play_move(board, player):", @@ -7033,13 +6627,13 @@ " board[row][col] = player" ], "response": { - "message": "", "passed": true, "result": [] }, "step": "nested_assignment_input" }, { + "get_solution": "program", "page": "Making the Board", "program": [ "def make_board(size):", @@ -7068,7 +6662,6 @@ "test()" ], "response": { - "message": "", "passed": true, "result": [ { @@ -7086,23 +6679,14 @@ "def make_board(size): return [[' '] * size] * size" ], "response": { - "message": "

The sublists in the result are not all separate objects.

", + "message": "

\u7ed9\u5b9a\u8fd9\u4e9b\u8f93\u5165\uff1a

\n
size = 2\n
\n

\u4f60\u7684\u4ee3\u7801\u8f93\u51fa\uff1a

\n
[[' ', ' '], [' ', ' ']]\n
\n

which is correct!

\n

However, the sublists in the result are not all separate objects.

", "passed": false, "result": [] }, "step": "fix_make_board" }, { - "get_solution": [ - "def make_board(size):", - " board = []", - " for _ in range(size):", - " row = []", - " for _ in range(size):", - " row.append(' ')", - " board.append(row)", - " return board" - ], + "get_solution": "program", "page": "Making the Board", "program": [ "def make_board(size):", @@ -7115,7 +6699,6 @@ " return board" ], "response": { - "message": "", "passed": true, "result": [] }, @@ -7205,10 +6788,445 @@ " print_draw()" ], "response": { - "message": "", "passed": true, "result": [] }, "step": "the_full_game" + }, + { + "get_solution": "program", + "page": "Introducing Dictionaries", + "program": [ + "french = {'apple': 'pomme', 'box': 'boite'}" + ], + "response": { + "passed": true, + "result": [] + }, + "step": "first_dict" + }, + { + "page": "Introducing Dictionaries", + "program": [ + "french = {}" + ], + "response": { + "message": "

Oops, you need to set french = {'apple': 'pomme', 'box': 'boite'} before we can continue.

", + "passed": false, + "result": [] + }, + "step": "dict_access" + }, + { + "get_solution": "program", + "page": "Introducing Dictionaries", + "program": [ + "french[0]" + ], + "response": { + "passed": true, + "result": [ + { + "data": [ + { + "didyoumean": [], + "exception": { + "message": "0", + "type": "KeyError" + }, + "frames": [ + { + "filename": "/my_program.py", + "lineno": 1, + "lines": [ + { + "is_current": true, + "lineno": 1, + "text": "french[0]", + "type": "line" + } + ], + "name": "", + "type": "frame", + "variables": [ + { + "name": "french\n", + "value": "{'apple': 'pomme', 'box': 'boite'}\n" + } + ] + } + ], + "friendly": "

A KeyError is raised when a value is not found as a\nkey in a Python dict or in a similar object.

\n

The key 0 cannot be found in the dict french.

", + "tail": "" + } + ], + "text": [ + "Traceback (most recent call last):", + " File \"/my_program.py\", line 1, in ", + "--> 1 | french[0]", + " ^^^^^^^^^", + "french = {'apple': 'pomme', 'box': 'boite'}", + "", + "KeyError: 0" + ], + "type": "traceback" + } + ] + }, + "step": "dict_access" + }, + { + "page": "Introducing Dictionaries", + "program": [ + "french = {}" + ], + "response": { + "message": "

Oops, you need to set french = {'apple': 'pomme', 'box': 'boite'} before we can continue.

", + "passed": false, + "result": [] + }, + "step": "dict_access2" + }, + { + "get_solution": "program", + "page": "Introducing Dictionaries", + "program": [ + "french['apple']" + ], + "response": { + "passed": true, + "result": [ + { + "text": "'pomme'\n", + "type": "stdout" + } + ] + }, + "step": "dict_access2" + }, + { + "page": "Introducing Dictionaries", + "program": [ + "french = {}" + ], + "response": { + "message": "

Oops, you need to set french = {'apple': 'pomme', 'box': 'boite'} before we can continue.

", + "passed": false, + "result": [] + }, + "step": "dict_access3" + }, + { + "get_solution": "program", + "page": "Introducing Dictionaries", + "program": [ + "french['box']" + ], + "response": { + "passed": true, + "result": [ + { + "text": "'boite'\n", + "type": "stdout" + } + ] + }, + "step": "dict_access3" + }, + { + "page": "Introducing Dictionaries", + "program": [ + "french = {}" + ], + "response": { + "message": "

Oops, you need to set french = {'apple': 'pomme', 'box': 'boite'} before we can continue.

", + "passed": false, + "result": [] + }, + "step": "dict_access4" + }, + { + "get_solution": "program", + "page": "Introducing Dictionaries", + "program": [ + "french['pomme']" + ], + "response": { + "passed": true, + "result": [ + { + "data": [ + { + "didyoumean": [], + "exception": { + "message": "'pomme'", + "type": "KeyError" + }, + "frames": [ + { + "filename": "/my_program.py", + "lineno": 1, + "lines": [ + { + "is_current": true, + "lineno": 1, + "text": "french['pomme']", + "type": "line" + } + ], + "name": "", + "type": "frame", + "variables": [ + { + "name": "french\n", + "value": "{'apple': 'pomme', 'box': 'boite'}\n" + } + ] + } + ], + "friendly": "

A KeyError is raised when a value is not found as a\nkey in a Python dict or in a similar object.

\n

The key 'pomme' cannot be found in the dict french.

", + "tail": "" + } + ], + "text": [ + "Traceback (most recent call last):", + " File \"/my_program.py\", line 1, in ", + "--> 1 | french['pomme']", + " ^^^^^^^^^^^^^^^", + "french = {'apple': 'pomme', 'box': 'boite'}", + "", + "KeyError: 'pomme'" + ], + "type": "traceback" + } + ] + }, + "step": "dict_access4" + }, + { + "get_solution": "program", + "page": "\u5b57\u5178\u4f7f\u7528\u7684\u5b9e\u8df5", + "program": [ + "def total_cost(cart, prices):", + " result = 0", + " for item in cart:", + " price = prices[item]", + " result += price", + " return result" + ], + "response": { + "passed": true, + "result": [] + }, + "step": "shopping_cart1" + }, + { + "get_solution": "program", + "page": "\u5b57\u5178\u4f7f\u7528\u7684\u5b9e\u8df5", + "program": [ + "def total_cost(cart, quantities, prices):", + " result = 0", + " for item in cart:", + " price = prices[item]", + " quantity = quantities[item]", + " result += price * quantity", + " return result" + ], + "response": { + "passed": true, + "result": [] + }, + "step": "shopping_cart4" + }, + { + "get_solution": "program", + "page": "\u5b57\u5178\u4f7f\u7528\u7684\u5b9e\u8df5", + "program": [ + "def substitute(string):", + " result = ''", + " for char in string:", + " if char == 'A':", + " char = 'T'", + " elif char == 'T':", + " char = 'A'", + " elif char == 'G':", + " char = 'C'", + " elif char == 'C':", + " char = 'G'", + " result += char", + " return result", + "", + "original = 'AGTAGCGTCCTTAGTTACAGGATGGCTTAT'", + "expected = 'TCATCGCAGGAATCAATGTCCTACCGAATA'", + "assert_equal(substitute(original), expected)" + ], + "response": { + "passed": true, + "result": [ + { + "text": "OK\n", + "type": "stdout" + } + ] + }, + "step": "dna_part1" + }, + { + "get_solution": "program", + "page": "\u5b57\u5178\u4f7f\u7528\u7684\u5b9e\u8df5", + "program": [ + "def substitute(string, d):", + " result = \"\"", + " for letter in string:", + " result += d[letter]", + " return result" + ], + "response": { + "passed": true, + "result": [] + }, + "step": "dna_part2" + }, + { + "get_solution": "program", + "page": "Iterating over Dictionary Keys", + "program": [ + "quantities = {'apple': 1, 'cat': 10}", + "print(quantities.keys())" + ], + "response": { + "passed": true, + "result": [ + { + "text": "dict_keys(['apple', 'cat'])\n", + "type": "stdout" + } + ] + }, + "step": "introducing_keys" + }, + { + "get_solution": "program", + "page": "Iterating over Dictionary Keys", + "program": [ + "quantities = {'apple': 1, 'cat': 10}", + "for key in quantities.keys():", + " print(key)" + ], + "response": { + "passed": true, + "result": [ + { + "text": "apple\ncat\n", + "type": "stdout" + } + ] + }, + "step": "keys_are_iterable" + }, + { + "get_solution": "program", + "page": "Iterating over Dictionary Keys", + "program": [ + "quantities = {'apple': 1, 'cat': 10}", + "for key in quantities:", + " print(key)" + ], + "response": { + "passed": true, + "result": [ + { + "text": "apple\ncat\n", + "type": "stdout" + } + ] + }, + "step": "keys_are_iterable2" + }, + { + "get_solution": "program", + "page": "Iterating over Dictionary Keys", + "program": [ + "def total_cost(quantities, prices):", + " result = 0", + " for item in quantities:", + " price = prices[item]", + " quantity = quantities[item]", + " result += price * quantity", + " return result" + ], + "response": { + "passed": true, + "result": [] + }, + "step": "cleanup_shopping_cart" + }, + { + "get_solution": "program", + "page": "Iterating over Dictionary Keys", + "program": [ + "def print_words(french):", + " for word in french:", + " print(\"English: \" + word)", + " print(\"French: \" + french[word])", + " print(\"---\")" + ], + "response": { + "passed": true, + "result": [] + }, + "step": "english_to_french" + }, + { + "get_solution": "program", + "page": "Iterating over Dictionary Keys", + "program": [ + "def print_words(french, german):", + " for word in french:", + " print(\"English: \" + word)", + " print(\"French: \" + french[word])", + " print(\"German: \" + german[word])", + " print(\"---\")" + ], + "response": { + "passed": true, + "result": [] + }, + "step": "english_to_german" + }, + { + "get_solution": "program", + "page": "Iterating over Dictionary Keys", + "program": [ + "def print_words(words):", + " for word in words:", + " translations = words[word]", + "", + " print(f\"English: {word}\")", + " for language in translations:", + " print(f\"{language}: {translations[language]}\")", + " print(f\"---\")", + "", + "print_words({", + " 'apple': {", + " 'French': 'pomme',", + " 'German': 'apfel',", + " },", + " 'box': {", + " 'French': 'boite',", + " 'German': 'kasten',", + " },", + "})" + ], + "response": { + "passed": true, + "result": [ + { + "text": "English: apple\nFrench: pomme\nGerman: apfel\n---\nEnglish: box\nFrench: boite\nGerman: kasten\n---\n", + "type": "stdout" + } + ] + }, + "step": "nested_dictionaries" } ] \ No newline at end of file diff --git a/translations/locales/zh/LC_MESSAGES/futurecoder.mo b/translations/locales/zh/LC_MESSAGES/futurecoder.mo index e79c1c4806dd8520f7dd873878398fca2e79e183..5091015b7255ec46666d27a8d177bc7c3369e957 100644 GIT binary patch delta 36615 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