mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2026-03-26 17:02:27 -04:00
chore(curriculum): remove upcoming python superblock (#57247)
This commit is contained in:
committed by
GitHub
parent
62c4b665b7
commit
fcedb7e98d
@@ -108,7 +108,7 @@ model user {
|
||||
is2018DataVisCert Boolean? // Undefined
|
||||
is2018FullStackCert Boolean? // Undefined
|
||||
isCollegeAlgebraPyCertV8 Boolean? // Undefined
|
||||
isUpcomingPythonCertV8 Boolean? // Undefined
|
||||
// isUpcomingPythonCertV8 Boolean? // Undefined. It is in the db but has never been used.
|
||||
keyboardShortcuts Boolean? // Undefined
|
||||
linkedin String? // Null | Undefined
|
||||
location String? // Null
|
||||
|
||||
@@ -48,7 +48,6 @@ export const newUser = (email: string) => ({
|
||||
isCollegeAlgebraPyCertV8: false,
|
||||
isRespWebDesignCert: false,
|
||||
isSciCompPyCertV7: false,
|
||||
isUpcomingPythonCertV8: null,
|
||||
keyboardShortcuts: false,
|
||||
linkedin: null,
|
||||
location: '',
|
||||
|
||||
@@ -6,7 +6,6 @@ import {
|
||||
setupServer,
|
||||
superRequest
|
||||
} from '../../../jest.utils';
|
||||
import { SHOW_UPCOMING_CHANGES } from '../../utils/env';
|
||||
|
||||
describe('certificate routes', () => {
|
||||
setupServer();
|
||||
@@ -396,12 +395,6 @@ describe('certificate routes', () => {
|
||||
];
|
||||
const unclaimableCerts = ['fake-slug'];
|
||||
|
||||
if (SHOW_UPCOMING_CHANGES) {
|
||||
claimableCerts.push(Certification.UpcomingPython);
|
||||
} else {
|
||||
unclaimableCerts.push(Certification.UpcomingPython);
|
||||
}
|
||||
|
||||
for (const certSlug of claimableCerts) {
|
||||
const response = await superRequest('/certificate/verify', {
|
||||
method: 'PUT',
|
||||
|
||||
@@ -39,8 +39,7 @@ const {
|
||||
machineLearningPyV7Id,
|
||||
relationalDatabaseV8Id,
|
||||
collegeAlgebraPyV8Id,
|
||||
foundationalCSharpV8Id,
|
||||
upcomingPythonV8Id
|
||||
foundationalCSharpV8Id
|
||||
} = certIds;
|
||||
|
||||
function isCertAllowed(certSlug: string): boolean {
|
||||
@@ -157,10 +156,9 @@ function createCertTypeIds(challenges: ReturnType<typeof getChallenges>) {
|
||||
[certTypes.foundationalCSharpV8]: getCertById(
|
||||
foundationalCSharpV8Id,
|
||||
challenges
|
||||
),
|
||||
)
|
||||
|
||||
// upcoming
|
||||
[certTypes.upcomingPythonV8]: getCertById(upcomingPythonV8Id, challenges)
|
||||
};
|
||||
}
|
||||
|
||||
@@ -184,7 +182,6 @@ interface CertI {
|
||||
isRelationalDatabaseCertV8?: boolean;
|
||||
isCollegeAlgebraPyCertV8?: boolean;
|
||||
isFoundationalCSharpCertV8?: boolean;
|
||||
isUpcomingPythonCertV8?: boolean;
|
||||
}
|
||||
|
||||
function getUserIsCertMap(user: CertI) {
|
||||
@@ -207,8 +204,7 @@ function getUserIsCertMap(user: CertI) {
|
||||
isMachineLearningPyCertV7 = false,
|
||||
isRelationalDatabaseCertV8 = false,
|
||||
isCollegeAlgebraPyCertV8 = false,
|
||||
isFoundationalCSharpCertV8 = false,
|
||||
isUpcomingPythonCertV8 = false
|
||||
isFoundationalCSharpCertV8 = false
|
||||
} = user;
|
||||
|
||||
return {
|
||||
@@ -230,8 +226,7 @@ function getUserIsCertMap(user: CertI) {
|
||||
isMachineLearningPyCertV7,
|
||||
isRelationalDatabaseCertV8,
|
||||
isCollegeAlgebraPyCertV8,
|
||||
isFoundationalCSharpCertV8,
|
||||
isUpcomingPythonCertV8
|
||||
isFoundationalCSharpCertV8
|
||||
};
|
||||
}
|
||||
|
||||
@@ -390,8 +385,7 @@ export const protectedCertificateRoutes: FastifyPluginCallbackTypebox = (
|
||||
isQaCertV7: true,
|
||||
isRelationalDatabaseCertV8: true,
|
||||
isRespWebDesignCert: true,
|
||||
isSciCompPyCertV7: true,
|
||||
isUpcomingPythonCertV8: true
|
||||
isSciCompPyCertV7: true
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -78,7 +78,6 @@ export const unprotectedCertificateRoutes: FastifyPluginCallbackTypebox = (
|
||||
isRelationalDatabaseCertV8: true,
|
||||
isCollegeAlgebraPyCertV8: true,
|
||||
isFoundationalCSharpCertV8: true,
|
||||
isUpcomingPythonCertV8: true,
|
||||
isHonest: true,
|
||||
username: true,
|
||||
name: true,
|
||||
|
||||
@@ -32,7 +32,6 @@ const collegeAlgebraPyBase = '/learn/college-algebra-with-python';
|
||||
const takeHomeBase = '/learn/coding-interview-prep/take-home-projects';
|
||||
const foundationalCSharpBase =
|
||||
'/learn/foundational-c-sharp-with-microsoft/foundational-c-sharp-with-microsoft-certification-exam';
|
||||
const upcomingPythonBase = '/learn/upcoming-python';
|
||||
const fullStackDeveloperBase = '/learn/full-stack-developer';
|
||||
const a2EnglishBase = '/learn/a2-english-for-developers';
|
||||
const b1EnglishBase = '/learn/b1-english-for-developers';
|
||||
@@ -811,19 +810,6 @@ const allStandardCerts = [
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: '64afc4e8f3b37856e035b85f',
|
||||
title: 'Upcoming Python Certification',
|
||||
certSlug: Certification.UpcomingPython,
|
||||
projects: [
|
||||
{
|
||||
id: '64afc37bf3b37856e035b85e',
|
||||
title: 'Upcoming Python Project',
|
||||
link: `${upcomingPythonBase}/upcoming-python-project`,
|
||||
certSlug: Certification.UpcomingPython
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: '651dd7e01d697d0aab7833b7',
|
||||
title: 'A2 English for Developers',
|
||||
|
||||
@@ -1387,20 +1387,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"upcoming-python": {
|
||||
"title": "Upcoming Python",
|
||||
"intro": ["placeholder"],
|
||||
"blocks": {
|
||||
"learn-python-by-building-a-blackjack-game": {
|
||||
"title": "Learn Python by Building a Blackjack Game",
|
||||
"intro": ["Learn Python.", ""]
|
||||
},
|
||||
"upcoming-python-project": {
|
||||
"title": "Upcoming Python Project",
|
||||
"intro": ["placeholder"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"a2-english-for-developers": {
|
||||
"title": "A2 English for Developers (Beta)",
|
||||
"intro": [
|
||||
|
||||
@@ -40,7 +40,6 @@ const iconMap = {
|
||||
[SuperBlocks.CollegeAlgebraPy]: CollegeAlgebra,
|
||||
[SuperBlocks.FoundationalCSharp]: CSharpLogo,
|
||||
[SuperBlocks.FullStackDeveloper]: ResponsiveDesign,
|
||||
[SuperBlocks.UpcomingPython]: PythonIcon,
|
||||
[SuperBlocks.A2English]: A2EnglishIcon,
|
||||
[SuperBlocks.B1English]: B1EnglishIcon,
|
||||
[SuperBlocks.RosettaCode]: RosettaCodeIcon,
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
title: Upcoming Python Certification
|
||||
superBlock: upcoming-python
|
||||
certification: upcoming-python
|
||||
---
|
||||
|
||||
## Upcoming Python Certification
|
||||
|
||||
Learn the basics of Python.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
title: Introduction to the Learn Algorithm Design by Building the Shortest Path Algorithm
|
||||
block: learn-algorithm-design-by-building-the-shortest-path-algorithm
|
||||
superBlock: upcoming-python
|
||||
---
|
||||
|
||||
## Introduction to the Learn Algorithm Design by Building the Shortest Path Algorithm
|
||||
|
||||
This is a test for the new project-based curriculum.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
title: Introduction to the Learn Classes and Objects by Building a Sudoku Solver
|
||||
block: learn-classes-and-objects-by-building-a-sudoku-solver
|
||||
superBlock: upcoming-python
|
||||
---
|
||||
|
||||
## Introduction to the Learn Classes and Objects by Building a Sudoku Solver
|
||||
|
||||
This is a test for the new project-based curriculum.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
title: Introduction to the Learn Data Structures by Building the Merge Sort Algorithm
|
||||
block: learn-data-structures-by-building-the-merge-sort-algorithm
|
||||
superBlock: upcoming-python
|
||||
---
|
||||
|
||||
## Introduction to the Learn Data Structures by Building the Merge Sort Algorithm
|
||||
|
||||
This is a test for the new project-based curriculum.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
title: Introduction to the Learn How to Work with Numbers and Strings by Implementing the Luhn Algorithm
|
||||
block: learn-how-to-work-with-numbers-and-strings-by-implementing-the-luhn-algorithm
|
||||
superBlock: upcoming-python
|
||||
---
|
||||
|
||||
## Introduction to the Learn How to Work with Numbers and Strings by Implementing the Luhn Algorithm
|
||||
|
||||
This is a test for the new project-based curriculum.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
title: Introduction to the Learn Lambda Functions by Building an Expense Tracker
|
||||
block: learn-lambda-functions-by-building-an-expense-tracker
|
||||
superBlock: scientific-computing-with-python
|
||||
---
|
||||
|
||||
## Introduction to the Learn Lambda Functions by Building an Expense Tracker
|
||||
|
||||
This is a test for the new project-based curriculum.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
title: Introduction to the Learn Python List Comprehension by Building a Case Converter Program
|
||||
block: learn-list-comprehension-by-building-a-case-converter-program
|
||||
superBlock: upcoming-python
|
||||
---
|
||||
|
||||
## Introduction to the Learn Python List Comprehension by Building a Case Converter Program
|
||||
|
||||
This is a test for the new project-based curriculum.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
title: Introduction to Learn Python by Building a Blackjack Game
|
||||
block: learn-python-by-building-a-blackjack-game
|
||||
superBlock: scientific-computing-with-python
|
||||
---
|
||||
|
||||
## Introduction to Learn Python by Building a Blackjack Game
|
||||
|
||||
Learn Python!
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
title: Introduction to the Learn Recursion by Solving the Tower of Hanoi Puzzle
|
||||
block: learn-recursion-by-solving-the-tower-of-hanoi-puzzle
|
||||
superBlock: upcoming-python
|
||||
---
|
||||
|
||||
## Introduction to the Learn Recursion by Solving the Tower of Hanoi Puzzle
|
||||
|
||||
This is a test for the new project-based curriculum.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
title: Introduction to the Learn Regular Expressions by Building a Password Generator
|
||||
block: learn-regular-expressions-by-building-a-password-generator
|
||||
superBlock: upcoming-python
|
||||
---
|
||||
|
||||
## Introduction to the Learn Regular Expressions by Building a Password Generator
|
||||
|
||||
This is a test for the new project-based curriculum.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
title: Introduction to the Learn String Manipulation by Building a Cipher
|
||||
block: learn-string-manipulation-by-building-a-cipher
|
||||
superBlock: upcoming-python
|
||||
---
|
||||
|
||||
## Introduction to the Learn String Manipulation by Building a Cipher
|
||||
|
||||
This is a test for the new project-based curriculum.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
title: Introduction to the Learn tree traversal
|
||||
block: learn-tree-traversal-by-building-a-binary-search-tree
|
||||
superBlock: upcoming-python
|
||||
---
|
||||
|
||||
## Introduction to the Learn tree traversal
|
||||
|
||||
This is a test for the new project-based curriculum.
|
||||
@@ -69,7 +69,7 @@ const defaultProps = {
|
||||
},
|
||||
sourceInstanceName: 'mockSourceInstanceName',
|
||||
superOrder: 1,
|
||||
superBlock: SuperBlocks.UpcomingPython,
|
||||
superBlock: SuperBlocks.RespWebDesign,
|
||||
tail: ['mockTail'],
|
||||
template: 'mockTemplate',
|
||||
tests: [] as Test[],
|
||||
|
||||
@@ -26,8 +26,7 @@ export const ConditionalDonationAlert = ({
|
||||
const unfinishedCertifications = [
|
||||
SuperBlocks.A2English,
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.FullStackDeveloper,
|
||||
SuperBlocks.UpcomingPython
|
||||
SuperBlocks.FullStackDeveloper
|
||||
];
|
||||
|
||||
if (!isDonating && betaCertifications.includes(superBlock))
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
{
|
||||
"name": "Learn Python by Building a Blackjack Game",
|
||||
"isUpcomingChange": true,
|
||||
"usesMultifileEditor": true,
|
||||
"hasEditableBoundaries": true,
|
||||
"dashedName": "learn-python-by-building-a-blackjack-game",
|
||||
"helpCategory": "Python",
|
||||
"order": 0,
|
||||
"superBlock": "upcoming-python",
|
||||
"challengeOrder": [
|
||||
{
|
||||
"id": "5daa813381b9e3db6c126b43",
|
||||
"title": "Step 1"
|
||||
},
|
||||
{
|
||||
"id": "64a5229b99ff0e8250cd9a72",
|
||||
"title": "Step 2"
|
||||
},
|
||||
{
|
||||
"id": "64b163c20e59cbd4a64940b0",
|
||||
"title": "Step 3"
|
||||
},
|
||||
{
|
||||
"id": "64b171849f925b0773aa434c",
|
||||
"title": "Step 4"
|
||||
},
|
||||
{
|
||||
"id": "65df3afd233057f6a620a860",
|
||||
"title": "Step 5"
|
||||
}
|
||||
],
|
||||
"blockLayout": "legacy-challenge-grid"
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"name": "Upcoming Python Project",
|
||||
"isUpcomingChange": true,
|
||||
"dashedName": "upcoming-python-project",
|
||||
"hasEditableBoundaries": true,
|
||||
"helpCategory": "Python",
|
||||
"order": 1,
|
||||
"superBlock": "upcoming-python",
|
||||
"challengeOrder": [
|
||||
{
|
||||
"id": "64afc37bf3b37856e035b85e",
|
||||
"title": "Upcoming Python Project"
|
||||
},
|
||||
{
|
||||
"id": "6703d8f42ebd112db6f7788a",
|
||||
"title": "Video Layout"
|
||||
},
|
||||
{
|
||||
"id": "6703d9382ebd112db6f7788b",
|
||||
"title": "Odin Layout"
|
||||
}
|
||||
],
|
||||
"blockLayout": "legacy-challenge-list"
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
id: 64afc4e8f3b37856e035b85f
|
||||
title: Upcoming Python Certification
|
||||
certification: upcoming-python-certification
|
||||
challengeType: 7
|
||||
isPrivate: true
|
||||
tests:
|
||||
- id: 64afc37bf3b37856e035b85e
|
||||
title: Upcoming Python Project
|
||||
@@ -1,54 +0,0 @@
|
||||
---
|
||||
id: 5daa813381b9e3db6c126b43
|
||||
title: Step 1
|
||||
challengeType: 20
|
||||
dashedName: step-1
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
PYTHON
|
||||
|
||||
Set the `hello` variable to "world". Then print the value.
|
||||
|
||||
# --hints--
|
||||
|
||||
The source code should include `one = 2`
|
||||
|
||||
```js
|
||||
assert(code.match(/one\s*=\s*2/))
|
||||
```
|
||||
|
||||
The `hello` variable should equal "world".
|
||||
|
||||
```js
|
||||
({ test: () => assert.equal(__userGlobals.get("hello"), "world") })
|
||||
```
|
||||
|
||||
The `one` variable should be an integer.
|
||||
|
||||
```js
|
||||
({ test: () => {
|
||||
assert(runPython(`_Node(_code).find_variable("one").is_integer()`))
|
||||
}})
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```py
|
||||
--fcc-editable-region--
|
||||
one = 1
|
||||
hello = "goodbye"
|
||||
print(hello)
|
||||
--fcc-editable-region--
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```py
|
||||
one = 2
|
||||
hello = "world"
|
||||
print(hello)
|
||||
```
|
||||
@@ -1,50 +0,0 @@
|
||||
---
|
||||
id: 64a5229b99ff0e8250cd9a72
|
||||
title: Step 2
|
||||
challengeType: 20
|
||||
dashedName: step-2
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
step 2 instructions
|
||||
|
||||
# --hints--
|
||||
|
||||
Test 1
|
||||
|
||||
```js
|
||||
({ input: ["Beau", "Carnes"], test: () => {
|
||||
assert.equal( "Beau", __userGlobals.get("name"));
|
||||
assert.equal( "Carnes", __userGlobals.get("last_name"));
|
||||
} })
|
||||
```
|
||||
|
||||
Test 2
|
||||
|
||||
```js
|
||||
({ input: ["Bob", "Carnes"], test: () => {
|
||||
assert.equal( "Bob", __userGlobals.get("name"));
|
||||
assert.equal( "Carnes", __userGlobals.get("last_name"));
|
||||
} })
|
||||
```
|
||||
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```py
|
||||
--fcc-editable-region--
|
||||
name = input('What is your name?')
|
||||
print('Hi ' + name)
|
||||
--fcc-editable-region--
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```py
|
||||
name = input('What is your name?')
|
||||
last_name = input('What is your last name?')
|
||||
print('Hi ' + name + ' ' + last_name)
|
||||
```
|
||||
@@ -1,71 +0,0 @@
|
||||
---
|
||||
id: 64b163c20e59cbd4a64940b0
|
||||
title: Step 3
|
||||
challengeType: 20
|
||||
dashedName: step-3
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Create a function to add two numbers together.
|
||||
|
||||
# --hints--
|
||||
|
||||
Adding 3 and 5 should return 8.
|
||||
|
||||
```js
|
||||
({
|
||||
test: () => assert.equal(__userGlobals.get("add")(3,5), 8)
|
||||
})
|
||||
```
|
||||
|
||||
Test value of `__name__`
|
||||
|
||||
```js
|
||||
({
|
||||
test: () => assert(runPython(`__name__ == '__main__'`))
|
||||
})
|
||||
```
|
||||
|
||||
Test cleaner syntax
|
||||
|
||||
```js
|
||||
({
|
||||
test: () => assert(runPython(`add(4,5) == 9`))
|
||||
})
|
||||
```
|
||||
|
||||
Testing getDef
|
||||
|
||||
```js
|
||||
({
|
||||
test: () => {
|
||||
const add = __helpers.python.getDef(code, "add");
|
||||
assert.deepEqual(add, {
|
||||
def: "def add(a, b):\n return a + b\n",
|
||||
function_parameters: "a, b",
|
||||
function_body: " return a + b\n",
|
||||
function_indentation: 0
|
||||
});
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```py
|
||||
--fcc-editable-region--
|
||||
|
||||
--fcc-editable-region--
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```py
|
||||
|
||||
def add(a, b):
|
||||
return a + b
|
||||
|
||||
```
|
||||
@@ -1,34 +0,0 @@
|
||||
---
|
||||
id: 64b171849f925b0773aa434c
|
||||
title: Step 4
|
||||
challengeType: 20
|
||||
dashedName: step-4
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Create an list of numbers from 1 to 3 and assign it to the variable `xs`.
|
||||
|
||||
# --hints--
|
||||
|
||||
`xs` should be the list `[1,2,3]`.
|
||||
|
||||
```js
|
||||
({ test: () => assert.deepEqual(Array.from(__userGlobals.get("xs")), [1,2,3])})
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```py
|
||||
--fcc-editable-region--
|
||||
|
||||
--fcc-editable-region--
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```py
|
||||
xs = [1,2,3]
|
||||
```
|
||||
@@ -1,53 +0,0 @@
|
||||
---
|
||||
id: 65df3afd233057f6a620a860
|
||||
title: Step 5
|
||||
challengeType: 20
|
||||
dashedName: step-5
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
This shows how the helper functions can be used to analyze a learner's class definitions
|
||||
|
||||
# --instructions--
|
||||
|
||||
We can just find the class definition inside Python, return it to the JavaScript, and then check if it contains the string "pass".
|
||||
|
||||
If we need something more reliable, we can expand the helpers to check for pass statements specifically. This would be useful if say, we wanted to write classes containing, say, passengers.
|
||||
|
||||
# --hints--
|
||||
|
||||
`TreeNode` should not contain any `pass` statements.
|
||||
|
||||
```js
|
||||
({ test: () => {
|
||||
const pyClassStr = runPython(`str(_Node(_code).find_class("TreeNode"))`);
|
||||
assert.notInclude(pyClassStr, "pass")
|
||||
}})
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```py
|
||||
--fcc-editable-region--
|
||||
class TreeNode:
|
||||
pass
|
||||
|
||||
class Trap:
|
||||
pass
|
||||
--fcc-editable-region--
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```py
|
||||
class TreeNode:
|
||||
def __init__(self, thing):
|
||||
self.thing = thing
|
||||
|
||||
class Trap:
|
||||
pass
|
||||
|
||||
```
|
||||
@@ -1,40 +0,0 @@
|
||||
---
|
||||
id: 64afc37bf3b37856e035b85e
|
||||
title: Upcoming Python Project
|
||||
challengeType: 20
|
||||
dashedName: upcoming-python-project
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Python Project instructions
|
||||
|
||||
# --hints--
|
||||
|
||||
Test 1
|
||||
|
||||
```js
|
||||
({ input: ["Beau", "Carnes"], test: () => {
|
||||
assert.equal( "Beau", __userGlobals.get("name"));
|
||||
assert.equal( "Carnes", __userGlobals.get("last_name"));
|
||||
} })
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```py
|
||||
--fcc-editable-region--
|
||||
name = input('What is your name?')
|
||||
print('Hi ' + name)
|
||||
--fcc-editable-region--
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```py
|
||||
name = input('What is your name?')
|
||||
last_name = input('What is your last name?')
|
||||
print('Hi ' + name + ' ' + last_name)
|
||||
```
|
||||
@@ -1,121 +0,0 @@
|
||||
---
|
||||
id: 6703d8f42ebd112db6f7788a
|
||||
title: Video Layout
|
||||
challengeType: 11
|
||||
videoId: nVAaxZ34khk
|
||||
dashedName: video-layout
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Watch the video and answer the questions below.
|
||||
|
||||
# --questions--
|
||||
|
||||
## --text--
|
||||
|
||||
Question 1?
|
||||
|
||||
## --answers--
|
||||
|
||||
`answer 1`
|
||||
|
||||
### --feedback--
|
||||
|
||||
Feedback.
|
||||
|
||||
---
|
||||
|
||||
`answer 2`
|
||||
|
||||
### --feedback--
|
||||
|
||||
Feedback.
|
||||
|
||||
---
|
||||
|
||||
`answer 3`
|
||||
|
||||
### --feedback--
|
||||
|
||||
Feedback.
|
||||
|
||||
---
|
||||
|
||||
`answer 4`
|
||||
|
||||
## --video-solution--
|
||||
|
||||
4
|
||||
|
||||
## --text--
|
||||
|
||||
Question 2?
|
||||
|
||||
## --answers--
|
||||
|
||||
`answer 1`
|
||||
|
||||
### --feedback--
|
||||
|
||||
Feedback.
|
||||
|
||||
---
|
||||
|
||||
`answer 2`
|
||||
|
||||
### --feedback--
|
||||
|
||||
Feedback.
|
||||
|
||||
---
|
||||
|
||||
`answer 3`
|
||||
|
||||
---
|
||||
|
||||
`answer 4`
|
||||
|
||||
### --feedback--
|
||||
|
||||
Feedback.
|
||||
|
||||
## --video-solution--
|
||||
|
||||
3
|
||||
|
||||
## --text--
|
||||
|
||||
Question 3?
|
||||
|
||||
## --answers--
|
||||
|
||||
`answer 1`
|
||||
|
||||
---
|
||||
|
||||
`answer 2`
|
||||
|
||||
### --feedback--
|
||||
|
||||
Feedback.
|
||||
|
||||
---
|
||||
|
||||
`answer 3`
|
||||
|
||||
### --feedback--
|
||||
|
||||
Feedback.
|
||||
|
||||
---
|
||||
|
||||
`answer 4`
|
||||
|
||||
### --feedback--
|
||||
|
||||
Feedback.
|
||||
|
||||
## --video-solution--
|
||||
|
||||
1
|
||||
@@ -1,133 +0,0 @@
|
||||
---
|
||||
id: 6703d9382ebd112db6f7788b
|
||||
title: Odin Layout
|
||||
challengeType: 19
|
||||
videoId: nVAaxZ34khk
|
||||
dashedName: odin-layout
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Watch the video and answer the questions below.
|
||||
|
||||
# --assignment--
|
||||
|
||||
assignment 1
|
||||
|
||||
---
|
||||
|
||||
assignemnt 2
|
||||
|
||||
# --questions--
|
||||
|
||||
## --text--
|
||||
|
||||
Question 1?
|
||||
|
||||
## --answers--
|
||||
|
||||
`answer 1`
|
||||
|
||||
### --feedback--
|
||||
|
||||
Here's some `feedback`.
|
||||
|
||||
---
|
||||
|
||||
`answer 2`
|
||||
|
||||
### --feedback--
|
||||
|
||||
More JS feedback:
|
||||
|
||||
```js
|
||||
console.log('incorrect');
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
`answer 3`
|
||||
|
||||
### --feedback--
|
||||
|
||||
Feedback.
|
||||
|
||||
---
|
||||
|
||||
`answer 4`
|
||||
|
||||
## --video-solution--
|
||||
|
||||
4
|
||||
|
||||
## --text--
|
||||
|
||||
Question 2?
|
||||
|
||||
## --answers--
|
||||
|
||||
`answer 1`
|
||||
|
||||
### --feedback--
|
||||
|
||||
Feedback.
|
||||
|
||||
---
|
||||
|
||||
`answer 2`
|
||||
|
||||
### --feedback--
|
||||
|
||||
Feedback.
|
||||
|
||||
---
|
||||
|
||||
`answer 3`
|
||||
|
||||
---
|
||||
|
||||
`answer 4`
|
||||
|
||||
### --feedback--
|
||||
|
||||
Feedback.
|
||||
|
||||
## --video-solution--
|
||||
|
||||
3
|
||||
|
||||
## --text--
|
||||
|
||||
Question 3?
|
||||
|
||||
## --answers--
|
||||
|
||||
`answer 1`
|
||||
|
||||
---
|
||||
|
||||
`answer 2`
|
||||
|
||||
### --feedback--
|
||||
|
||||
Feedback.
|
||||
|
||||
---
|
||||
|
||||
`answer 3`
|
||||
|
||||
### --feedback--
|
||||
|
||||
Feedback.
|
||||
|
||||
---
|
||||
|
||||
`answer 4`
|
||||
|
||||
### --feedback--
|
||||
|
||||
Feedback.
|
||||
|
||||
## --video-solution--
|
||||
|
||||
1
|
||||
@@ -81,7 +81,6 @@ const directoryToSuperblock = {
|
||||
'18-project-euler': 'project-euler',
|
||||
'19-foundational-c-sharp-with-microsoft':
|
||||
'foundational-c-sharp-with-microsoft',
|
||||
'20-upcoming-python': 'upcoming-python',
|
||||
'21-a2-english-for-developers': 'a2-english-for-developers',
|
||||
'22-rosetta-code': 'rosetta-code',
|
||||
'23-python-for-everybody': 'python-for-everybody',
|
||||
|
||||
@@ -193,7 +193,7 @@ describe('getSuperBlockFromPath', () => {
|
||||
);
|
||||
|
||||
it('handles all the directories in ./challenges/english', () => {
|
||||
expect.assertions(25);
|
||||
expect.assertions(24);
|
||||
|
||||
for (const directory of directories) {
|
||||
expect(() => getSuperBlockFromDir(directory)).not.toThrow();
|
||||
@@ -201,7 +201,7 @@ describe('getSuperBlockFromPath', () => {
|
||||
});
|
||||
|
||||
it("returns valid superblocks (or 'certifications') for all valid arguments", () => {
|
||||
expect.assertions(25);
|
||||
expect.assertions(24);
|
||||
|
||||
const superBlockPaths = directories.filter(x => x !== '00-certifications');
|
||||
|
||||
|
||||
@@ -27,7 +27,6 @@ export enum Certification {
|
||||
FoundationalCSharp = 'foundational-c-sharp-with-microsoft',
|
||||
// Upcoming certifications
|
||||
FullStackDeveloper = 'full-stack-developer-v9',
|
||||
UpcomingPython = 'upcoming-python-v8',
|
||||
A2English = 'a2-english-for-developers-v8',
|
||||
B1English = 'b1-english-for-developers-v8',
|
||||
// Legacy certifications
|
||||
@@ -77,7 +76,6 @@ export const legacyFullStackCertification = [
|
||||
// showUpcomingChanges is true.
|
||||
export const upcomingCertifications = [
|
||||
Certification.FullStackDeveloper,
|
||||
Certification.UpcomingPython,
|
||||
Certification.A2English,
|
||||
Certification.B1English
|
||||
] as const;
|
||||
@@ -101,7 +99,6 @@ export const certTypes = {
|
||||
relationalDatabaseV8: 'isRelationalDatabaseCertV8',
|
||||
collegeAlgebraPyV8: 'isCollegeAlgebraPyCertV8',
|
||||
foundationalCSharpV8: 'isFoundationalCSharpCertV8',
|
||||
upcomingPythonV8: 'isUpcomingPythonCertV8',
|
||||
jsAlgoDataStructV8: 'isJsAlgoDataStructCertV8'
|
||||
} as const;
|
||||
|
||||
@@ -124,7 +121,6 @@ export const certIds = {
|
||||
relationalDatabaseV8Id: '606243f50267e718b1e755f4',
|
||||
collegeAlgebraPyV8Id: '61531b20cc9dfa2741a5b800',
|
||||
foundationalCSharpV8Id: '647f7da207d29547b3bee1ba',
|
||||
upcomingPythonV8Id: '64afc4e8f3b37856e035b85f',
|
||||
jsAlgoDataStructV8Id: '658180220947283cdc0689ce'
|
||||
};
|
||||
|
||||
@@ -147,7 +143,6 @@ export const completionHours = {
|
||||
[certTypes.relationalDatabaseV8]: 300,
|
||||
[certTypes.collegeAlgebraPyV8]: 300,
|
||||
[certTypes.foundationalCSharpV8]: 300,
|
||||
[certTypes.upcomingPythonV8]: 300,
|
||||
[certTypes.jsAlgoDataStructV8]: 300
|
||||
};
|
||||
|
||||
@@ -173,10 +168,9 @@ export const certSlugTypeMap = {
|
||||
[Certification.MachineLearningPy]: certTypes.machineLearningPyV7,
|
||||
[Certification.RelationalDb]: certTypes.relationalDatabaseV8,
|
||||
[Certification.CollegeAlgebraPy]: certTypes.collegeAlgebraPyV8,
|
||||
[Certification.FoundationalCSharp]: certTypes.foundationalCSharpV8,
|
||||
[Certification.FoundationalCSharp]: certTypes.foundationalCSharpV8
|
||||
|
||||
// upcoming
|
||||
[Certification.UpcomingPython]: certTypes.upcomingPythonV8
|
||||
};
|
||||
|
||||
export const superBlockCertTypeMap = {
|
||||
@@ -205,10 +199,9 @@ export const superBlockCertTypeMap = {
|
||||
|
||||
// post-modern
|
||||
// TODO: use enum
|
||||
[SuperBlocks.RespWebDesignNew]: certTypes.respWebDesign,
|
||||
[SuperBlocks.RespWebDesignNew]: certTypes.respWebDesign
|
||||
|
||||
// upcoming
|
||||
[SuperBlocks.UpcomingPython]: certTypes.upcomingPythonV8
|
||||
};
|
||||
|
||||
export const certTypeIdMap = {
|
||||
@@ -230,7 +223,6 @@ export const certTypeIdMap = {
|
||||
[certTypes.relationalDatabaseV8]: certIds.relationalDatabaseV8Id,
|
||||
[certTypes.collegeAlgebraPyV8]: certIds.collegeAlgebraPyV8Id,
|
||||
[certTypes.foundationalCSharpV8]: certIds.foundationalCSharpV8Id,
|
||||
[certTypes.upcomingPythonV8]: certIds.upcomingPythonV8Id,
|
||||
[certTypes.jsAlgoDataStructV8]: certIds.jsAlgoDataStructV8Id
|
||||
};
|
||||
|
||||
@@ -254,7 +246,6 @@ export const certTypeTitleMap = {
|
||||
[certTypes.relationalDatabaseV8]: 'Relational Database',
|
||||
[certTypes.collegeAlgebraPyV8]: 'College Algebra with Python',
|
||||
[certTypes.foundationalCSharpV8]: 'Foundational C# with Microsoft',
|
||||
[certTypes.upcomingPythonV8]: 'Upcoming Python',
|
||||
[certTypes.jsAlgoDataStructV8]:
|
||||
'JavaScript Algorithms and Data Structures (Beta)'
|
||||
};
|
||||
@@ -281,7 +272,6 @@ export const linkedInCredentialIds = {
|
||||
[Certification.CollegeAlgebraPy]: 'cawp',
|
||||
[Certification.FoundationalCSharp]: 'fcswm',
|
||||
[Certification.FullStackDeveloper]: 'fsd',
|
||||
[Certification.UpcomingPython]: 'up',
|
||||
[Certification.JsAlgoDataStructNew]: 'jaads',
|
||||
[Certification.A2English]: 'a2efd',
|
||||
[Certification.B1English]: 'b1efd'
|
||||
|
||||
@@ -23,7 +23,6 @@ export enum SuperBlocks {
|
||||
CollegeAlgebraPy = 'college-algebra-with-python',
|
||||
FoundationalCSharp = 'foundational-c-sharp-with-microsoft',
|
||||
FullStackDeveloper = 'full-stack-developer',
|
||||
UpcomingPython = 'upcoming-python',
|
||||
A2English = 'a2-english-for-developers',
|
||||
B1English = 'b1-english-for-developers',
|
||||
RosettaCode = 'rosetta-code',
|
||||
@@ -102,8 +101,7 @@ export const superBlockStages: StageMap = {
|
||||
[SuperBlockStage.New]: [],
|
||||
[SuperBlockStage.Upcoming]: [
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.FullStackDeveloper,
|
||||
SuperBlocks.UpcomingPython
|
||||
SuperBlocks.FullStackDeveloper
|
||||
]
|
||||
};
|
||||
|
||||
@@ -127,7 +125,6 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
SuperBlocks.JsAlgoDataStructNew,
|
||||
SuperBlocks.TheOdinProject,
|
||||
SuperBlocks.FullStackDeveloper,
|
||||
SuperBlocks.UpcomingPython,
|
||||
SuperBlocks.A2English,
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.PythonForEverybody
|
||||
@@ -137,7 +134,6 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
SuperBlocks.ProjectEuler,
|
||||
SuperBlocks.TheOdinProject,
|
||||
SuperBlocks.FullStackDeveloper,
|
||||
SuperBlocks.UpcomingPython,
|
||||
SuperBlocks.A2English,
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.PythonForEverybody
|
||||
@@ -147,7 +143,6 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
SuperBlocks.ProjectEuler,
|
||||
SuperBlocks.TheOdinProject,
|
||||
SuperBlocks.FullStackDeveloper,
|
||||
SuperBlocks.UpcomingPython,
|
||||
SuperBlocks.A2English,
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.PythonForEverybody
|
||||
@@ -157,7 +152,6 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
SuperBlocks.JsAlgoDataStructNew,
|
||||
SuperBlocks.TheOdinProject,
|
||||
SuperBlocks.FullStackDeveloper,
|
||||
SuperBlocks.UpcomingPython,
|
||||
SuperBlocks.A2English,
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.PythonForEverybody
|
||||
@@ -165,7 +159,6 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
[Languages.Portuguese]: [
|
||||
SuperBlocks.JsAlgoDataStructNew,
|
||||
SuperBlocks.FullStackDeveloper,
|
||||
SuperBlocks.UpcomingPython,
|
||||
SuperBlocks.A2English,
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.PythonForEverybody
|
||||
@@ -173,7 +166,6 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
[Languages.Ukrainian]: [
|
||||
SuperBlocks.JsAlgoDataStructNew,
|
||||
SuperBlocks.FullStackDeveloper,
|
||||
SuperBlocks.UpcomingPython,
|
||||
SuperBlocks.A2English,
|
||||
SuperBlocks.B1English
|
||||
],
|
||||
@@ -181,7 +173,6 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
SuperBlocks.JsAlgoDataStructNew,
|
||||
SuperBlocks.TheOdinProject,
|
||||
SuperBlocks.FullStackDeveloper,
|
||||
SuperBlocks.UpcomingPython,
|
||||
SuperBlocks.A2English,
|
||||
SuperBlocks.B1English
|
||||
],
|
||||
@@ -197,7 +188,6 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
SuperBlocks.JsAlgoDataStructNew,
|
||||
SuperBlocks.TheOdinProject,
|
||||
SuperBlocks.FullStackDeveloper,
|
||||
SuperBlocks.UpcomingPython,
|
||||
SuperBlocks.A2English,
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.PythonForEverybody
|
||||
@@ -221,7 +211,6 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
SuperBlocks.JsAlgoDataStructNew,
|
||||
SuperBlocks.JsAlgoDataStruct,
|
||||
SuperBlocks.FullStackDeveloper,
|
||||
SuperBlocks.UpcomingPython,
|
||||
SuperBlocks.A2English,
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.PythonForEverybody
|
||||
@@ -243,7 +232,6 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
|
||||
SuperBlocks.FrontEndDevLibs,
|
||||
SuperBlocks.JsAlgoDataStructNew,
|
||||
SuperBlocks.FullStackDeveloper,
|
||||
SuperBlocks.UpcomingPython,
|
||||
SuperBlocks.A2English,
|
||||
SuperBlocks.B1English,
|
||||
SuperBlocks.PythonForEverybody,
|
||||
|
||||
@@ -50,7 +50,6 @@ const superBlockFolderMap = {
|
||||
'project-euler': '18-project-euler',
|
||||
'foundational-c-sharp-with-microsoft':
|
||||
'19-foundational-c-sharp-with-microsoft',
|
||||
'upcoming-python': '20-upcoming-python',
|
||||
'a2-english-for-developers': '21-a2-english-for-developers',
|
||||
'rosetta-code': '22-rosetta-code',
|
||||
'python-for-everybody': '23-python-for-everybody',
|
||||
|
||||
@@ -71,10 +71,6 @@ export const superBlockList = [
|
||||
name: '(New) Foundational C# with Microsoft',
|
||||
path: '19-foundational-c-sharp-with-microsoft'
|
||||
},
|
||||
{
|
||||
name: 'Upcoming Python',
|
||||
path: '20-upcoming-python'
|
||||
},
|
||||
{
|
||||
name: 'A2 English for Developers (Beta)',
|
||||
path: '21-a2-english-for-developers'
|
||||
|
||||
@@ -7,8 +7,7 @@ import './block.css';
|
||||
const stepBasedSuperblocks = [
|
||||
'07-scientific-computing-with-python',
|
||||
'14-responsive-web-design-22',
|
||||
'15-javascript-algorithms-and-data-structures-22',
|
||||
'20-upcoming-python'
|
||||
'15-javascript-algorithms-and-data-structures-22'
|
||||
];
|
||||
|
||||
const taskBasedSuperblocks = [
|
||||
|
||||
@@ -41,10 +41,9 @@ function insertStep(stepNum: number): void {
|
||||
throw `Step not inserted. New step number must be less than ${
|
||||
challengeOrder.length + 2
|
||||
}.`;
|
||||
const challengeType = [
|
||||
SuperBlocks.SciCompPy,
|
||||
SuperBlocks.UpcomingPython
|
||||
].includes(getMetaData().superBlock)
|
||||
const challengeType = [SuperBlocks.SciCompPy].includes(
|
||||
getMetaData().superBlock
|
||||
)
|
||||
? challengeTypes.python
|
||||
: challengeTypes.html;
|
||||
|
||||
@@ -72,10 +71,9 @@ function createEmptySteps(num: number): void {
|
||||
}
|
||||
|
||||
const nextStepNum = getMetaData().challengeOrder.length + 1;
|
||||
const challengeType = [
|
||||
SuperBlocks.SciCompPy,
|
||||
SuperBlocks.UpcomingPython
|
||||
].includes(getMetaData().superBlock)
|
||||
const challengeType = [SuperBlocks.SciCompPy].includes(
|
||||
getMetaData().superBlock
|
||||
)
|
||||
? challengeTypes.python
|
||||
: challengeTypes.html;
|
||||
|
||||
|
||||
@@ -22,7 +22,6 @@ export function getSuperBlockSubPath(superBlock: SuperBlocks): string {
|
||||
[SuperBlocks.CollegeAlgebraPy]: '17-college-algebra-with-python',
|
||||
[SuperBlocks.ProjectEuler]: '18-project-euler',
|
||||
[SuperBlocks.FoundationalCSharp]: '19-foundational-c-sharp-with-microsoft',
|
||||
[SuperBlocks.UpcomingPython]: '20-upcoming-python',
|
||||
[SuperBlocks.A2English]: '21-a2-english-for-developers',
|
||||
[SuperBlocks.RosettaCode]: '22-rosetta-code',
|
||||
[SuperBlocks.PythonForEverybody]: '23-python-for-everybody',
|
||||
|
||||
@@ -86,11 +86,7 @@ describe('external curriculum data build', () => {
|
||||
({ dashedName }) => dashedName
|
||||
);
|
||||
|
||||
const isUpcoming = [
|
||||
'b1-english-for-developers',
|
||||
'upcoming-python',
|
||||
'full-stack-developer'
|
||||
];
|
||||
const isUpcoming = ['b1-english-for-developers', 'full-stack-developer'];
|
||||
|
||||
// TODO: this is a hack, we should have a single source of truth for the
|
||||
// list of superblocks that are available.
|
||||
|
||||
Reference in New Issue
Block a user