Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions Sprint-2/1-key-errors/0.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// Predict and explain first...
// =============> write your prediction here
// I predict there will be a syntax error but not sure what the error is yet. I think it has something to do with the variable declaration of str.

// call the function capitalise with a string input
// interpret the error message and figure out why an error is occurring
Expand All @@ -9,5 +10,15 @@ function capitalise(str) {
return str;
}

console.log(capitalise("hello world"));
// =============> write your explanation here
// it showed SyntaxError: Identifier 'str' has already been declared, this is because we have declared the variable str twice,
// once as a parameter and once as a variable inside the function. To fix this error, we can either change the name of the
// variable inside the function to something else like newStr.
// =============> write your new code here
function capitalise(str) {
let newStr = `${str[0].toUpperCase()}${str.slice(1)}`;
return newStr;
}

console.log(capitalise("hello world"));
27 changes: 21 additions & 6 deletions Sprint-2/1-key-errors/1.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,34 @@

// Why will an error occur when this program runs?
// =============> write your prediction here
// I predict that the decimalNumber variable will be timed 100 and will get a percentage value of 50%, but that only my predictions.

// Try playing computer with the example to work out what is going on

function convertToPercentage(decimalNumber) {
const decimalNumber = 0.5;
const percentage = `${decimalNumber * 100}%`;
// function convertToPercentage(decimalNumber) {
// // const decimalNumber = 0.5;
// const percentage = `${decimalNumber * 100}%`;

return percentage;
}
// return percentage;
// }

console.log(decimalNumber);
// console.log(decimalNumber);

// =============> write your explanation here
// SyntaxError: Identifier 'decimalNumber' has already been declared
// This error occurs because we have declared the variable decimalNumber twice,
// once as a parameter and once as a variable inside the function.

// apparently there is another error that we only console logged the variable decimalNumber which is not declared in the global scope,
// to fix this we instead call the function convertToPercentage with a decimal number as an argument and log the result of that function call to the console.

// Finally, correct the code to fix the problem
// =============> write your new code here

function convertToPercentage(decimalNumber) {
const percentage = `${decimalNumber * 100}%`;

return percentage;
}

console.log(convertToPercentage(0.5));
21 changes: 17 additions & 4 deletions Sprint-2/1-key-errors/2.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,33 @@

// Predict and explain first BEFORE you run any code...

// this function should square any number but instead we're going to get an error

// =============> write your prediction of the error here
// I think this is an obvious one because when defining a function you cant give a direct input like 3,
// instead you have to give a variable name as a parameter and then use that variable name in the function
// body to perform the calculation. So I predict that there will be a syntax error because of the way
// the function is defined with a direct input of 3 instead of a variable name.

function square(3) {
return num * num;
}
// function square(3) {
// return num * num;
// }

// =============> write the error message here
// /Users/me/CYF/Module-Structuring-and-Testing-Data/Sprint-2/1-key-errors/2.js:12
// function square(3) {
// ^

// SyntaxError: Unexpected number

// =============> explain this error message here
// This error message is saying that there is an unexpected number in the function definition, which is the number 3.

// Finally, correct the code to fix the problem

// =============> write your new code here

function square(num) {
return num * num;
}

console.log(square(3));
18 changes: 14 additions & 4 deletions Sprint-2/2-mandatory-debug/0.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,24 @@
// Predict and explain first...

// =============> write your prediction here
// I predict that there will be error because the function will not return anything
// and when we try to log the result of the function call to the console, it will return undefined.

function multiply(a, b) {
console.log(a * b);
}
// function multiply(a, b) {
// console.log(a * b);
// }

console.log(`The result of multiplying 10 and 32 is ${multiply(10, 32)}`);
// console.log(`The result of multiplying 10 and 32 is ${multiply(10, 32)}`);

// =============> write your explanation here
// The function multiply logs in the result of a * b to the console but does not return anything,
// so when we try to log the result of the function call to the console, it will return undefined.

// Finally, correct the code to fix the problem
// =============> write your new code here

function multiply(a, b) {
return a * b;
}

console.log(`The result of multiplying 10 and 32 is ${multiply(10, 32)}`);
21 changes: 16 additions & 5 deletions Sprint-2/2-mandatory-debug/1.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,24 @@
// Predict and explain first...
// =============> write your prediction here
// I predict there will be a syntax error but not sure what the error is yet.
// I think it has something to do with return as it return nothing , so the function was'nt well defined.

function sum(a, b) {
return;
a + b;
}
// function sum(a, b) {
// return;
// a + b;
// }

console.log(`The sum of 10 and 32 is ${sum(10, 32)}`);
// console.log(`The sum of 10 and 32 is ${sum(10, 32)}`);

// =============> write your explanation here
// The function sum is not returning the result of a + b, instead it is returning undefined
// because the return statement is on a separate line and does not include the expression a + b.

// Finally, correct the code to fix the problem
// =============> write your new code here

function sum(a, b) {
return a + b;
}

console.log(`The sum of 10 and 32 is ${sum(10, 32)}`);
37 changes: 28 additions & 9 deletions Sprint-2/2-mandatory-debug/2.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,42 @@

// Predict the output of the following code:
// =============> Write your prediction here
// II predict that the output will be "The last digit of 42 is 3", "The last digit of 105 is 3",
// and "The last digit of 806 is 3" because the function getLastDigit is using the variable num
// which is assigned the value of 103 using const in global scope,
// so it will always return the last digit of 103 which is 3.

const num = 103;
// const num = 103;

function getLastDigit() {
return num.toString().slice(-1);
}
// function getLastDigit() {
// return num.toString().slice(-1);
// }

console.log(`The last digit of 42 is ${getLastDigit(42)}`);
console.log(`The last digit of 105 is ${getLastDigit(105)}`);
console.log(`The last digit of 806 is ${getLastDigit(806)}`);
// console.log(`The last digit of 42 is ${getLastDigit(42)}`);
// console.log(`The last digit of 105 is ${getLastDigit(105)}`);
// console.log(`The last digit of 806 is ${getLastDigit(806)}`);

// Now run the code and compare the output to your prediction
// =============> write the output here
// The last digit of 42 is 3
// The last digit of 105 is 3
// The last digit of 806 is 3
// it's similar to what I predicted.

// Explain why the output is the way it is
// =============> write your explanation here
// The output is the way it is because the function getLastDigit is using the variable num which is assigned
// the value of 103 using const in global scope, and the function definition didn't have an argument to receive the number.

// Finally, correct the code to fix the problem
// =============> write your new code here

// This program should tell the user the last digit of each number.
// Explain why getLastDigit is not working properly - correct the problem
const num = 103;

function getLastDigit(num) {
return num.toString().slice(-1);
}

console.log(`The last digit of 42 is ${getLastDigit(42)}`);
console.log(`The last digit of 105 is ${getLastDigit(105)}`);
console.log(`The last digit of 806 is ${getLastDigit(806)}`);
10 changes: 8 additions & 2 deletions Sprint-2/3-mandatory-implement/1-bmi.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,11 @@
// It should return their Body Mass Index to 1 decimal place

function calculateBMI(weight, height) {
// return the BMI of someone based off their weight and height
}
// return the BMI of someone based off their weight and height

const bmi = weight / (height * height);
return Math.round(bmi * 10) / 10;
}

// Example:
console.log(calculateBMI(70, 1.73));
9 changes: 9 additions & 0 deletions Sprint-2/3-mandatory-implement/2-cases.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,12 @@
// You will need to come up with an appropriate name for the function
// Use the MDN string documentation to help you find a solution
// This might help https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase

function toUpperSnakeCase(str) {
// return the string in UPPER_SNAKE_CASE

return str.replaceAll(" ", "_").toUpperCase();
// I used replaceAll to replace all spaces with underscores and then used toUpperCase to convert the string to uppercase.
}

console.log(toUpperSnakeCase("hello there"));
35 changes: 35 additions & 0 deletions Sprint-2/3-mandatory-implement/3-to-pounds.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,38 @@
// You will need to declare a function called toPounds with an appropriately named parameter.

// You should call this function a number of times to check it works for different inputs

function toPounds(penceString) {
// return the price in pounds

// I took the code and made it as a function called toPounds with a parameter called penceString,
// but after reviewing the code in Ai I noticed i have to add something called defensive programming,
// to make sure the input is following the format of a string with a number followed by the letter p,
// so I will add an if statement to check if the input is valid and if not, using endWith() method and then return an error message.

if (!penceString.endsWith("p")) {
return "Error: Please enter a valid pence format (e.g., '399p')";
}

const penceStringWithoutTrailingP = penceString.substring(
0,
penceString.length - 1
);

const paddedPenceNumberString = penceStringWithoutTrailingP.padStart(3, "0");

const pounds = paddedPenceNumberString.substring(
0,
paddedPenceNumberString.length - 2
);

const pence = paddedPenceNumberString
.substring(paddedPenceNumberString.length - 2)
.padEnd(2, "0");

return `£${pounds}.${pence}`;
}

console.log(toPounds("399p"));
console.log(toPounds("5p"));
console.log(toPounds("abc"));
9 changes: 9 additions & 0 deletions Sprint-2/4-mandatory-interpret/time-format.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,33 @@ function formatTimeDisplay(seconds) {
return `${pad(totalHours)}:${pad(remainingMinutes)}:${pad(remainingSeconds)}`;
}

console.log(formatTimeDisplay(61));

// You will need to play computer with this example - use the Python Visualiser https://pythontutor.com/visualize.html#mode=edit
// to help you answer these questions

// Questions

// a) When formatTimeDisplay is called how many times will pad be called?
// =============> write your answer here
// pad will be called 3 times, once for totalHours, once for remainingMinutes and once for remainingSeconds.

// Call formatTimeDisplay with an input of 61, now answer the following:

// b) What is the value assigned to num when pad is called for the first time?
// =============> write your answer here
// The value assigned to num when pad is called for the first time is 0 (totalHours).

// c) What is the return value of pad is called for the first time?
// =============> write your answer here
// The return value of pad when it is called for the first time is "00"

// d) What is the value assigned to num when pad is called for the last time in this program? Explain your answer
// =============> write your answer here
// The value assigned to num when pad is called for the last time in this program is 1 (remainingSeconds).
// This is because when we call formatTimeDisplay(61), the remainingSeconds is calculated as 61 % 60 which gives us 1

// e) What is the return value assigned to num when pad is called for the last time in this program? Explain your answer
// =============> write your answer here
// The return value assigned to num when pad is called for the last time in this program is "01".
// This is because pad(1) returns "01" since 1 is padded to 2 digits with leading zeros.
42 changes: 38 additions & 4 deletions Sprint-2/5-stretch-extend/format-time.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,24 @@
// Your task is to write tests for as many different groups of input data or edge cases as you can, and fix any bugs you find.

function formatAs12HourClock(time) {
const hours = Number(time.slice(0, 2));
if (hours > 12) {
return `${hours - 12}:00 pm`;
let hours = Number(time.slice(0, 2)); // if its const it will throe an TypeError you cant assign a const variable later on
const minutes = time.slice(3, 5);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could also extract the last two characters as time.slice(-2).

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see, yes it's a better way. Thank you



// for am and pm periods
const period = hours >= 12 ? "pm" : "am"; // if hours is greater than or equal to 12, it's pm, otherwise it's am

// to convert hours from 24-hour format to 12-hour format
if (hours === 0) {
hours = 12; // if hours is 0, it should be 12 in 12-hour format
} else if (hours > 12) {
hours = hours - 12;
}
return `${time} am`;

// for format hours to always be 2 digits
const padHours = hours.toString().padStart(2, "0");

return `${padHours}:${minutes} ${period}`;
}

const currentOutput = formatAs12HourClock("08:00");
Expand All @@ -23,3 +36,24 @@ console.assert(
currentOutput2 === targetOutput2,
`current output: ${currentOutput2}, target output: ${targetOutput2}`
);

const currentOutput3 = formatAs12HourClock("12:00");
const targetOutput3 = "12:00 pm";
console.assert(
currentOutput3 === targetOutput3,
`current output: ${currentOutput3}, target output: ${targetOutput3}`
);

const currentOutput4 = formatAs12HourClock("00:00");
const targetOutput4 = "12:00 am";
console.assert(
currentOutput4 === targetOutput4,
`current output: ${currentOutput4}, target output: ${targetOutput4}`
);

const currentOutput5 = formatAs12HourClock("13:20");
const targetOutput5 = "01:20 pm";
console.assert(
currentOutput5 === targetOutput5,
`current output: ${currentOutput5}, target output: ${targetOutput5}`
);