პროგრამირების საფუძვლები › დამწყები › პატარა პროგრამები
ვიქტორინა კოდით
ეს თავი CodeQuest Pro-ს ნაწილია
Pro ხსნის სკოლის ყველა კურსს და თამაშის ყველა ლეველს, ვიდეოს და პროექტს. ერთჯერადი გადახდა, გამოწერის გარეშე.
რას ისწავლი
- როგორ შეინახო კითხვები ობიექტების მასივად
- როგორ ამოწმებს ფუნქცია პასუხს და როგორ ითვლება ქულა
- რატომ ჯობს მონაცემების კოდისგან გამოყოფა
კითხვები მონაცემებია
ვიქტორინის დაწერა ასეც შეიძლება: ყოველი კითხვისთვის ცალკე console.log და ცალკე if. ათი კითხვა, ასი ხაზი, და ახალი კითხვის დამატება კოდის ცვლილებას ნიშნავს. ჯობს, კითხვებს ისე შეხედო, როგორც მონაცემებს: ყოველ კითხვას აქვს ტექსტი, პასუხის ვარიანტები და სწორი პასუხი. ეს ობიექტია. ბევრი კითხვა ობიექტების მასივია:
let questions = [
{
text: "რომელი ოპერატორი ამოწმებს მკაცრ ტოლობას?",
options: ["=", "==", "==="],
answer: 2
},
{
text: "რა არის მასივის პირველი ელემენტის ინდექსი?",
options: ["0", "1", "-1"],
answer: 0
},
{
text: "რას აბრუნებს ფუნქცია return-ის გარეშე?",
options: ["0", "undefined", "null"],
answer: 1
}
];answer სწორი ვარიანტის ინდექსია options მასივში: პირველ კითხვაში "===" ინდექსით 2.
კოდი, რომელიც ნებისმიერ კითხვაზე მუშაობს
ახლა ლოგიკა: ფუნქცია, რომელიც ერთ კითხვას ამოწმებს, და ციკლი, რომელიც ყველას გადის. რადგან ამ რედაქტორში prompt არ მუშაობს, მომხმარებლის პასუხებს მასივად „ჩავწერთ“, თითქოს ის უკვე უპასუხა.
function isCorrect(question, choice) {
return choice === question.answer;
}
let choices = [2, 1, 1]; // მოთამაშის პასუხები: ვარიანტების ინდექსები
let score = 0;
for (let i = 0; i < questions.length; i++) {
let q = questions[i];
let choice = choices[i];
if (isCorrect(q, choice)) {
score++;
console.log("✓", q.text);
} else {
console.log("✗", q.text, "— სწორი პასუხია:", q.options[q.answer]);
}
}აქ ინდექსიანი for გვჭირდება და არა for...of: ერთი და იგივე i ორ მასივს უკავშირდება, კითხვებს და პასუხებს.
შედეგი და პროცენტი
ბოლოს ქულა და პროცენტი. პროცენტი score / total * 100-ია, Math.round კი უახლოეს მთელამდე ამრგვალებს:
let total = 3;
let score = 2;
let percent = Math.round(score / total * 100);
console.log(`შედეგი: ${score}/${total} (${percent}%)`); // შედეგი: 2/3 (67%)და შეფასება პროცენტის მიხედვით, ნაცნობი else if ჯაჭვით.
რატომ ვთვლით პროცენტს და არ ვჩერდებით ქულაზე? „2 სწორი პასუხი“ თავისთავად ცოტას ამბობს: სამიდან თუ ოციდან? პროცენტი შედეგს კითხვების რაოდენობისგან დამოუკიდებელს ხდის, ამიტომ შეფასების ზღვრები, მაგალითად „60%-დან კარგია“, ნებისმიერი სიგრძის ვიქტორინაზე იმუშავებს.
რატომ ასე
ახალი კითხვის დასამატებლად ახლა ერთი ობიექტი უნდა დაამატო მასივში. ციკლს, ფუნქციას და ქულის დათვლას ხელიც არ უნდა ახლო. ასე მუშაობს ნამდვილი აპლიკაციები: კითხვები, პროდუქტები, დონეები მონაცემებია, რომლებიც ხშირად ფაილიდან ან ინტერნეტიდან მოდის, კოდი კი ერთხელ იწერება და ყველა მათგანზე მუშაობს. ამ იდეას მონაცემების და ლოგიკის გამოყოფა ჰქვია.
სცადე თავად
გაუშვი, მერე შეცვალე choices ისე, რომ ყველა პასუხი სწორი იყოს. ბოლოს დაამატე მეოთხე კითხვა.
ხშირი შეცდომები
- სწორი პასუხი ტექსტად და შედარება ინდექსთან. თუ
answer: "===", ხოლო მოთამაშის არჩევანი ინდექსია,===არასოდეს დაემთხვევა. აირჩიე ერთი ფორმა და ყველგან ის გამოიყენე. - კითხვების რაოდენობის ხელით ჩაწერა.
total = 3-ის ნაცვლადquestions.lengthგამოიყენე, მაშინ ახალი კითხვა ავტომატურად ჩაითვლება. - ქულის განულება ციკლში.
let score = 0;ციკლის წინ უნდა იყოს.
სავარჯიშო
დაამატე ვიქტორინას შეფასება პროცენტის მიხედვით: 90% და მეტი → შესანიშნავი!, 60%-დან → კარგია!, სხვა შემთხვევაში → გაიმეორე მასალა. პასუხებით [2, 0, 1] უნდა დაიბეჭდოს შედეგი: 3/3 (100%) და შესანიშნავი!.
💡 მინიშნება
ჯერ ციკლით დაითვალე score, მერე percent, ბოლოს if / else if / else ჯაჭვი, ჯერ ყველაზე მაღალი ზღვრით.
✅ ამოხსნის ნახვა
let questions = [
{ text: "რომელი ოპერატორი ამოწმებს მკაცრ ტოლობას?", options: ["=", "==", "==="], answer: 2 },
{ text: "რა არის მასივის პირველი ელემენტის ინდექსი?", options: ["0", "1", "-1"], answer: 0 },
{ text: "რას აბრუნებს ფუნქცია return-ის გარეშე?", options: ["0", "undefined", "null"], answer: 1 }
];
let choices = [2, 0, 1];
let score = 0;
for (let i = 0; i < questions.length; i++) {
if (choices[i] === questions[i].answer) {
score++;
}
}
let percent = Math.round(score / questions.length * 100);
console.log(`შედეგი: ${score}/${questions.length} (${percent}%)`);
if (percent >= 90) {
console.log("შესანიშნავი!");
} else if (percent >= 60) {
console.log("კარგია!");
} else {
console.log("გაიმეორე მასალა");
}მინი-ქვიზი
1ვიქტორინაში რა არის თითოეული კითხვა?
კითხვები მონაცემებია, ლოგიკა კი ერთი ციკლი.
2{ options: ["ა", "ბ", "გ"], answer: 1 }. რომელია სწორი პასუხი?
answer ინდექსია: 1 მეორე ვარიანტია.
3რას დააბრუნებს Math.round(2 / 3 * 100)?
66.666… უახლოეს მთელამდე მრგვალდება, ანუ 67-მდე.
შეჯამება
- კითხვები ობიექტების მასივია:
text,options,answer. - ერთი ფუნქცია ამოწმებს პასუხს, ერთი ციკლი გადის ყველა კითხვას.
- პროცენტი:
Math.round(score / total * 100). - მონაცემების და ლოგიკის გამოყოფა: ახალი კითხვა მხოლოდ ახალი ობიექტია.