Test JavaScript

Ecco un test per valutare le competenze acquisite sul linguaggio JavaScript.

Valuta le tue competenze su concetti di base ed avanzati di JavaScript con i test creati su Coding Creativo.

16

Il tuo punteggio è

The average score is 64%

 

Scrivi nei commenti eventuali dubbi o difficoltà o se c’è qualcosa di errato secondo voi!

Segui il nostro tutorial per apprendere sempre nuovi concetti al seguente link tutorial JavaScript!

Ecco alcuni link utili che puoi trovare sul blog:

Metodo includes

Proprietà length

Gioco indovina numero in JavaScript

Semplice quiz utilizzando gli array

Come sviluppare il gioco del 15 in JavaScript

Gioco della slot machine in JavaScript

Memory Game in JavaScript

Funzioni JavaScript e istruzione return

Funzioni di callback

Esempi funzioni di callback

Callback e setTimeout

Continua la lettura su: https://www.codingcreativo.it/test-javascript/ Autore del post: Coding Creativo Fonte: https://www.codingcreativo.it

Articoli Correlati

Quiz sui termini del cyberbullismo

08
Feb

Quiz sui termini del cyberbullismo

In occasione della giornata sul cyberbullismo vi proponiamo un quiz realizzato dai ragazzi del PON sulla sicurezza in rete

by Eleonora, Andrei, Sofia e Miruna

4

Il tuo punteggio è

div#ays-quiz-container-5 * { box-sizing: border-box; } /* Styles for Internet Explorer start */ #ays-quiz-container-5 #ays_finish_quiz_5 { } /* Styles for Quiz container */ #ays-quiz-container-5{ min-height: 350px; width:400px; background-color:#fff; background-position:center center;border-radius:0px 0px 0px 0px;box-shadow: 0px 0px 15px 1px rgba(0,0,0,0.4);border: none;} /* Styles for Navigation bar */ #ays-quiz-questions-nav-wrap-5 { width: 100%;border-radius:0px 0px 0px 0px;box-shadow: 0px 0px 15px 1px rgba(0,0,0,0.4);border: none;} #ays-quiz-questions-nav-wrap-5 .ays-quiz-questions-nav-content .ays-quiz-questions-nav-item a.ays_questions_nav_question { color: #000; border-color: #000; background-color: #fff; } #ays-quiz-questions-nav-wrap-5 .ays-quiz-questions-nav-content .ays-quiz-questions-nav-item.ays-quiz-questions-nav-item-active a.ays_questions_nav_question { box-shadow: inset 0 0 5px #000, 0 0 5px #000; } #ays-quiz-questions-nav-wrap-5 .ays-quiz-questions-nav-content .ays-quiz-questions-nav-item.ays-quiz-questions-nav-item-answered a.ays_questions_nav_question { color: #fff; border-color: #fff; background-color: #000; } #ays-quiz-questions-nav-wrap-5 .ays-quiz-questions-nav-content .ays-quiz-questions-nav-item a.ays_questions_nav_question.ays_quiz_correct_answer { color: rgba(39, 174, 96, 1); border-color: rgba(39, 174, 96, 1); background-color: rgba(39, 174, 96, 0.4); } #ays-quiz-questions-nav-wrap-5 .ays-quiz-questions-nav-content .ays-quiz-questions-nav-item a.ays_questions_nav_question.ays_quiz_wrong_answer { color: rgba(243, 134, 129, 1); border-color: rgba(243, 134, 129, 1); background-color: rgba(243, 134, 129, 0.4); } /* Styles for questions */ #ays-quiz-container-5 #ays_finish_quiz_5 div.step { min-height: 350px; } /* Styles for text inside quiz container */ #ays-quiz-container-5.ays-quiz-container .ays-questions-container .ays-start-page *:not(input), #ays-quiz-container-5.ays-quiz-container .ays-questions-container .ays_question_hint, #ays-quiz-container-5.ays-quiz-container .ays-questions-container label[for^=”ays-answer-“], #ays-quiz-container-5.ays-quiz-container .ays-questions-container p, #ays-quiz-container-5.ays-quiz-container .ays-questions-container .ays-fs-title, #ays-quiz-container-5.ays-quiz-container .ays-questions-container .ays-fs-subtitle, #ays-quiz-container-5.ays-quiz-container .ays-questions-container .logged_in_message, #ays-quiz-container-5.ays-quiz-container .ays-questions-container .ays-quiz-limitation-count-of-takers, #ays-quiz-container-5.ays-quiz-container .ays-questions-container .ays-quiz-limitation-count-of-takers *, #ays-quiz-container-5.ays-quiz-container .ays-questions-container .ays_score_message, #ays-quiz-container-5.ays-quiz-container .ays-questions-container .ays_message{ color: #000; outline: none; } /* Quiz title / transformation */ #ays-quiz-container-5 .ays-fs-title{ text-transform: uppercase; text-align: center; } #ays-quiz-container-5 .ays-quiz-question-note-message-box, #ays-quiz-container-5 .ays_quiz_question, #ays-quiz-container-5 .ays_quiz_question *:not([class^=’enlighter’]) { color: #000; } #ays-quiz-container-5 textarea, #ays-quiz-container-5 input::first-letter, #ays-quiz-container-5 select::first-letter, #ays-quiz-container-5 option::first-letter { color: initial !important; } #ays-quiz-container-5 p::first-letter:not(.ays_no_questions_message) { color: #000 !important; background-color: transparent !important; font-size: inherit !important; font-weight: inherit !important; float: none !important; line-height: inherit !important; margin: 0 !important; padding: 0 !important; } #ays-quiz-container-5 .select2-container, #ays-quiz-container-5 .ays-field * { font-size: 15px !important; } #ays-quiz-container-5 .ays_quiz_question p { font-size: 16px; text-align: center; } #ays-quiz-container-5 .ays_quiz_question { text-align: center ; margin-bottom: 10px; } #ays-quiz-container-5 .ays_quiz_question pre { max-width: 100%; white-space: break-spaces; } div#ays-quiz-container-5 .ays-questions-container .ays-field, div#ays-quiz-container-5 .ays-questions-container .ays-field input~label[for^=’ays-answer-‘], div#ays-quiz-container-5 .ays-questions-container .ays-modern-dark-question *, div#ays-quiz-container-5 .ays-questions-container .ays_quiz_question, div#ays-quiz-container-5 .ays-questions-container .ays_quiz_question *{ word-break: break-word; } #ays-quiz-container-5 .ays-quiz-timer p { font-size: 16px; } #ays-quiz-container-5 section.ays_quiz_redirection_timer_container hr, #ays-quiz-container-5 section.ays_quiz_timer_container hr { margin: 0; } #ays-quiz-container-5 section.ays_quiz_timer_container.ays_quiz_timer_red_warning .ays-quiz-timer { color: red; } #ays-quiz-container-5 .ays_thank_you_fs p { text-align: center; } #ays-quiz-container-5 .information_form input[type=’text’], #ays-quiz-container-5 .information_form input[type=’url’], #ays-quiz-container-5 .information_form input[type=’number’], #ays-quiz-container-5 .information_form input[type=’email’], #ays-quiz-container-5 .information_form input[type=’tel’], #ays-quiz-container-5 .information_form textarea, #ays-quiz-container-5 .information_form select, #ays-quiz-container-5 .information_form option { color: initial !important; outline: none; margin-left: 0; background-image: unset; } #ays-quiz-container-5 .information_form input[type=’checkbox’] { margin: 0 10px; outline: initial; -webkit-appearance: auto; -moz-appearance: auto; position: initial; width: initial; height: initial; border: initial; background: initial; } #ays-quiz-container-5 .information_form input[type=’checkbox’]::after { content: none; } #ays-quiz-container-5 .wrong_answer_text{ color:#ff4d4d; } #ays-quiz-container-5 .right_answer_text{ color:#33cc33; } #ays-quiz-container-5 .ays_cb_and_a, #ays-quiz-container-5 .ays_cb_and_a * { color: rgb(0,0,0); text-align: center; } #ays-quiz-container-5 iframe { min-height: 350px; } #ays-quiz-container-5 label.ays_for_checkbox, #ays-quiz-container-5 span.ays_checkbox_for_span { color: initial !important; display: block; } /* Quiz textarea height */ #ays-quiz-container-5 textarea { height: 100px; min-height: 100px; } /* Quiz rate and passed users count */ #ays-quiz-container-5 .ays_quizn_ancnoxneri_qanak, #ays-quiz-container-5 .ays_quiz_rete_avg{ color:#fff; background-color:#000; } #ays-quiz-container-5 .ays-questions-container > .ays_quizn_ancnoxneri_qanak { padding: 5px 20px; } #ays-quiz-container-5 div.for_quiz_rate.ui.star.rating .icon { color: rgba(0,0,0,0.35); } #ays-quiz-container-5 .ays_quiz_rete_avg div.for_quiz_rate_avg.ui.star.rating .icon { color: rgba(255,255,255,0.5); } #ays-quiz-container-5 .ays_quiz_rete .ays-quiz-rate-link-box .ays-quiz-rate-link { color: #000; } /* Loaders */ #ays-quiz-container-5 div.lds-spinner, #ays-quiz-container-5 div.lds-spinner2 { color: #000; } #ays-quiz-container-5 div.lds-spinner div:after, #ays-quiz-container-5 div.lds-spinner2 div:after { background-color: #000; } #ays-quiz-container-5 .lds-circle, #ays-quiz-container-5 .lds-facebook div, #ays-quiz-container-5 .lds-ellipsis div{ background: #000; } #ays-quiz-container-5 .lds-ripple div{ border-color: #000; } #ays-quiz-container-5 .lds-dual-ring::after, #ays-quiz-container-5 .lds-hourglass::after{ border-color: #000 transparent #000 transparent; } /* Stars */ #ays-quiz-container-5 .ui.rating .icon, #ays-quiz-container-5 .ui.rating .icon:before { font-family: Rating !important; } /* Progress bars */ #ays-quiz-container-5 #ays_finish_quiz_5 .ays-progress { border-color: rgba(0,0,0,0.8); } #ays-quiz-container-5 #ays_finish_quiz_5 .ays-progress-bg { background-color: rgba(0,0,0,0.3); } #ays-quiz-container-5 .ays-progress-value { color: #000; text-align: center; } #ays-quiz-container-5 .ays-progress-bar { background-color: #27AE60; } #ays-quiz-container-5 .ays-question-counter .ays-live-bar-wrap { direction:ltr !important; } #ays-quiz-container-5 .ays-live-bar-fill{ color: #000; border-bottom: 2px solid rgba(0,0,0,0.8); text-shadow: 0px 0px 5px #fff; } #ays-quiz-container-5 .ays-live-bar-fill.ays-live-fourth, #ays-quiz-container-5 .ays-live-bar-fill.ays-live-third, #ays-quiz-container-5 .ays-live-bar-fill.ays-live-second { text-shadow: unset; } #ays-quiz-container-5 .ays-live-bar-percent{ display:none; } /* Music, Sound */ #ays-quiz-container-5 .ays_music_sound { color:rgb(0,0,0); } /* Dropdown questions scroll bar */ #ays-quiz-container-5 blockquote { border-left-color: #000 !important; } /* Question hint */ #ays-quiz-container-5 .ays_question_hint_container .ays_question_hint_text { background-color:#fff; box-shadow: 0 0 15px 3px rgba(0,0,0,0.6); max-width: 270px; } #ays-quiz-container-5 .ays_question_hint_container .ays_question_hint_text p { max-width: unset; } #ays-quiz-container-5 .ays_questions_hint_max_width_class { max-width: 80%; } /* Information form */ #ays-quiz-container-5 .ays-form-title{ color:rgb(0,0,0); } /* Quiz timer */ #ays-quiz-container-5 div.ays-quiz-redirection-timer, #ays-quiz-container-5 div.ays-quiz-timer{ color: #000; text-align: center; } #ays-quiz-container-5 div.ays-quiz-timer.ays-quiz-message-before-timer:before { font-weight: 500; } /* Quiz buttons */ #ays-quiz-container-5 input#ays-submit, #ays-quiz-container-5 #ays_finish_quiz_5 .action-button, div#ays-quiz-container-5 #ays_finish_quiz_5 .action-button.ays_restart_button { background-color: #27AE60; color:#333; font-size: 17px; padding: 10px 20px; border-radius: 3px; white-space: nowrap; letter-spacing: 0; box-shadow: unset; } #ays-quiz-container-5 input#ays-submit, #ays-quiz-container-5 #ays_finish_quiz_5 input.action-button { } #ays-quiz-container-5 #ays_finish_quiz_5 a[class~=ajax_add_to_cart]{ background-color: #fff; color:#333; padding: 10px 5px; font-size: 14px; border-radius: 3px; white-space: nowrap; border: 1px solid #333; } #ays-quiz-container-5 #ays_finish_quiz_5 .action-button.ays_check_answer { padding: 5px 10px; font-size: 17px !important; } #ays-quiz-container-5 #ays_finish_quiz_5 .action-button.ays_download_certificate { white-space: nowrap; padding: 5px 10px; } #ays-quiz-container-5 #ays_finish_quiz_5 .action-button.ays_arrow { color:#333!important; white-space: nowrap; padding: 5px 10px; } #ays-quiz-container-5 input#ays-submit:hover, #ays-quiz-container-5 input#ays-submit:focus, #ays-quiz-container-5 #ays_finish_quiz_5 .action-button:hover, #ays-quiz-container-5 #ays_finish_quiz_5 .action-button:focus { box-shadow: 0 0 0 2px #333; background-color: #27AE60; } #ays-quiz-container-5 .ays_restart_button { color: #333; } #ays-quiz-container-5 .ays_buttons_div { justify-content: center; } #ays-quiz-container-5 .step:first-of-type .ays_buttons_div { justify-content: center !important; } #ays-quiz-container-5 input[type=’button’], #ays-quiz-container-5 input[type=’submit’] { color: #333 !important; outline: none; } #ays-quiz-container-5 #ays_finish_quiz_5 i.ays_early_finish.action-button[disabled]:hover, #ays-quiz-container-5 #ays_finish_quiz_5 i.ays_early_finish.action-button[disabled]:focus, #ays-quiz-container-5 #ays_finish_quiz_5 i.ays_early_finish.action-button[disabled], #ays-quiz-container-5 #ays_finish_quiz_5 i.ays_arrow.action-button[disabled]:hover, #ays-quiz-container-5 #ays_finish_quiz_5 i.ays_arrow.action-button[disabled]:focus, #ays-quiz-container-5 #ays_finish_quiz_5 i.ays_arrow.action-button[disabled] { color: #aaa !important; } #ays-quiz-container-5 .ays_finish.action-button{ margin: 10px 5px; } #ays-quiz-container-5 .ays-share-btn.ays-share-btn-branded { color: #fff; } /* Question answers */ #ays-quiz-container-5 .ays-field { border-color: #444; border-style: solid; border-width: 1px; box-shadow: none;flex-direction: row-reverse; } #ays-quiz-container-5 .ays-quiz-answers .ays-field:hover{ opacity: 1; } #ays-quiz-container-5 #ays_finish_quiz_5 .ays-field label.ays_answer_caption[for^=’ays-answer-‘] { z-index: 1; position:initial;bottom:0;} #ays-quiz-container-5 #ays_finish_quiz_5 .ays-field input~label[for^=’ays-answer-‘] { padding: 5px; } #ays-quiz-container-5 #ays_finish_quiz_5 .ays-field { margin-bottom: 10px; } #ays-quiz-container-5 #ays_finish_quiz_5 .ays-field.ays_grid_view_item { width: calc(50% – 5px); } #ays-quiz-container-5 #ays_finish_quiz_5 .ays-field.ays_grid_view_item:nth-child(odd) { margin-right: 5px; } #ays-quiz-container-5 #ays_finish_quiz_5 .ays-field input:checked+label:before { border-color: #27AE60; background: #27AE60; background-clip: content-box; } #ays-quiz-container-5 .ays-quiz-answers div.ays-text-right-answer { color: #000; } /* Answer maximum length of a text field */ #ays-quiz-container-5 .ays_quiz_question_text_message{ color: #000; text-align: left; font-size: 12px; } div#ays-quiz-container-5 div.ays_quiz_question_text_error_message { color: #ff0000; } /* Questions answer image */ #ays-quiz-container-5 .ays-answer-image { width:15em; height:150px; object-fit: cover; } /* Questions answer right/wrong icons */ #ays-quiz-container-5 .ays-field input~label.answered.correct:after{ content: url(‘https://www.famacademy.it/wp-content/plugins/quiz-maker/public/images/correct.png’); } #ays-quiz-container-5 .ays-field input~label.answered.wrong:after{ content: url(‘https://www.famacademy.it/wp-content/plugins/quiz-maker/public/images/wrong.png’); } #ays-quiz-container-5 .ays-field label.answered:last-of-type:after{ height: auto; left: 10px;top: 10px;} /* Dropdown questions */ #ays-quiz-container-5 .select2-container–default .select2-search–dropdown .select2-search__field:focus, #ays-quiz-container-5 .select2-container–default .select2-search–dropdown .select2-search__field { outline: unset; padding: 0.75rem; } #ays-quiz-container-5 #ays_finish_quiz_5 .ays-field .select2-container–default .select2-selection–single { border-bottom: 2px solid #27AE60; background-color: #27AE60; } #ays-quiz-container-5 .ays-field .select2-container–default .select2-selection–single .select2-selection__rendered, #ays-quiz-container-5 .ays-field .select2-container–default .select2-selection–single .select2-selection__placeholder, #ays-quiz-container-5 .ays-field .select2-container–default .select2-selection–single .select2-selection__arrow { color: #d8519f; } #ays-quiz-container-5 .ays-field .select2-container–default .select2-selection–single .select2-selection__rendered, #ays-quiz-container-5 .select2-container–default .select2-results__option–highlighted[aria-selected] { background-color: #27AE60; } #ays-quiz-container-5 .ays-field .select2-container–default, #ays-quiz-container-5 .ays-field .select2-container–default .selection, #ays-quiz-container-5 .ays-field .select2-container–default .dropdown-wrapper, #ays-quiz-container-5 .ays-field .select2-container–default .select2-selection–single .select2-selection__rendered, #ays-quiz-container-5 .ays-field .select2-container–default .select2-selection–single .select2-selection__rendered .select2-selection__placeholder, #ays-quiz-container-5 .ays-field .select2-container–default .select2-selection–single .select2-selection__arrow, #ays-quiz-container-5 .ays-field .select2-container–default .select2-selection–single .select2-selection__arrow b[role=’presentation’] { font-size: 16px !important; } #ays-quiz-container-5 .select2-container–default .select2-results__option { padding: 6px; } /* Dropdown questions scroll bar */ #ays-quiz-container-5 .select2-results__options::-webkit-scrollbar { width: 7px; } #ays-quiz-container-5 .select2-results__options::-webkit-scrollbar-track { background-color: rgba(255,255,255,0.35); } #ays-quiz-container-5 .select2-results__options::-webkit-scrollbar-thumb { transition: .3s ease-in-out; background-color: rgba(255,255,255,0.55); } #ays-quiz-container-5 .select2-results__options::-webkit-scrollbar-thumb:hover { transition: .3s ease-in-out; background-color: rgba(255,255,255,0.85); } /* WooCommerce product */ #ays-quiz-container-5 .ays-woo-block { background-color: rgba(39,174,96,0.8); } #ays-quiz-container-5 .ays-woo-product-block h4.ays-woo-product-title > a { color: #000; } /* Audio / Video */ #ays-quiz-container-5 .mejs-container .mejs-time{ box-sizing: unset; } #ays-quiz-container-5 .mejs-container .mejs-time-rail { padding-top: 15px; } #ays-quiz-container-5 .mejs-container .mejs-mediaelement video { margin: 0; } /* Limitation */ #ays-quiz-container-5 .ays-quiz-limitation-count-of-takers { padding: 50px; } /* Hestia theme (Version: 3.0.16) | Start */ #ays-quiz-container-5 .mejs-container .mejs-inner .mejs-controls .mejs-button > button:hover, #ays-quiz-container-5 .mejs-container .mejs-inner .mejs-controls .mejs-button > button { box-shadow: unset; background-color: transparent; } #ays-quiz-container-5 .mejs-container .mejs-inner .mejs-controls .mejs-button > button { margin: 10px 6px; } /* Hestia theme (Version: 3.0.16) | End */ /* Go theme (Version: 1.4.3) | Start */ #ays-quiz-container-5 label[for^=’ays-answer’]:before, #ays-quiz-container-5 label[for^=’ays-answer’]:before { -webkit-mask-image: unset; mask-image: unset; } #ays-quiz-container-5.ays_quiz_classic_light .ays-field input:checked+label.answered:before, #ays-quiz-container-5.ays_quiz_classic_dark .ays-field input:checked+label.answered:before { background-color: #27AE60 !important; } #ays-quiz-container-5.ays_quiz_classic_light .ays-field input:checked+label.answered.correct:before, #ays-quiz-container-5.ays_quiz_classic_dark .ays-field input:checked+label.answered.correct:before { background-color: #27ae60 !important; } #ays-quiz-container-5.ays_quiz_classic_light .ays-field input:checked+label.answered.wrong:before, #ays-quiz-container-5.ays_quiz_classic_dark .ays-field input:checked+label.answered.wrong:before { background-color: #cc3700 !important; } /* Go theme (Version: 1.4.3) | End */ #ays-quiz-container-5 .ays_quiz_results fieldset.ays_fieldset .ays_quiz_question .wp-video { width: 100% !important; max-width: 100%; } /* Classic Dark / Classic Light */ /* Dropdown questions right/wrong styles */ #ays-quiz-container-5.ays_quiz_classic_dark .correct_div, #ays-quiz-container-5.ays_quiz_classic_light .correct_div{ border-color: green !important; opacity: 1 !important; background-color: rgba(39,174,96,0.4) !important; } #ays-quiz-container-5.ays_quiz_classic_dark .correct_div .selected-field, #ays-quiz-container-5.ays_quiz_classic_light .correct_div .selected-field { padding: 0px 10px 0px 10px; color: green !important; } #ays-quiz-container-5.ays_quiz_classic_dark .wrong_div, #ays-quiz-container-5.ays_quiz_classic_light .wrong_div{ border-color: red !important; opacity: 1 !important; background-color: rgba(243,134,129,0.4) !important; } #ays-quiz-container-5.ays_quiz_classic_dark .ays-field.checked_answer_div.wrong_div input:checked~label, #ays-quiz-container-5.ays_quiz_classic_light .ays-field.checked_answer_div.wrong_div input:checked~label { background-color: rgba(243,134,129,0.4) !important; } #ays-quiz-container-5 .ays_question_result .ays-field .ays_quiz_hide_correct_answer:after{ content: ” !important; } #ays-quiz-container-5 .ays-quiz-close-full-screen { fill: #000; } #ays-quiz-container-5 .ays-quiz-open-full-screen { fill: #000; } @media screen and (max-width: 768px){ #ays-quiz-container-5{ max-width: 100%; } div#ays-quiz-container-5.ays_quiz_modern_light .step, div#ays-quiz-container-5.ays_quiz_modern_dark .step { padding-right: 0px !important; padding-top: 0px !important; } div#ays-quiz-container-5.ays_quiz_modern_light div.step[data-question-id], div#ays-quiz-container-5.ays_quiz_modern_dark div.step[data-question-id] { background-size: cover !important; background-position: center center !important; } div#ays-quiz-container-5.ays_quiz_modern_light .ays-abs-fs:not(.ays-start-page):not(.ays-end-page), div#ays-quiz-container-5.ays_quiz_modern_dark .ays-abs-fs:not(.ays-start-page):not(.ays-end-page) { width: 100%; } } /* Custom css styles */ /* RTL direction styles */

#ays-quiz-container-5 p {
margin: 0.625em;
}

#ays-quiz-container-5 .ays-field.checked_answer_div input:checked~label {
background-color: rgba(39,174,96,0.6);
}
#ays-quiz-container-5.ays_quiz_classic_light .enable_correction .ays-field.checked_answer_div input:checked+label,
#ays-quiz-container-5.ays_quiz_classic_dark .enable_correction .ays-field.checked_answer_div input:checked+label {
background-color: transparent;
}
#ays-quiz-container-5 .ays-field:hover{
background: rgba(39,174,96,0.8);
color: #fff;
transition: all .3s;
}
#ays-quiz-container-5 #ays_finish_quiz_5 .action-button:hover,
#ays-quiz-container-5 #ays_finish_quiz_5 .action-button:focus {
box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5), 0 0 0 3px #333;
background: #27AE60;
}

Bubble Sort Python

L’algoritmo bubble sort in Python è l’argomento di questa lezione. Il bubble sort è un algoritmo di ordinamento molto semplice da implementare, ma dobbiamo dire che è anche poco efficiente.

Infatti il bubble sort è utilizzato principalmente in ambito didattico per far apprendere le logiche e le basi della programmazione.

Il funzionamento del bubble sort è questo:

Si confrontano gli elementi vicini tra di loro, portando l’elemento maggiore in ultima posizione durante la prima “passata” (eseguendo n-1 confronti), poi il secondo massimo in penultima posizione e così via finché l’array non è ordinato.

Quindi ad ogni passaggio si inserisce nell’elenco il valore successivo più grande al posto giusto.

La complessità dell’algoritmo è O(n2), sia nel caso peggiore, sia nel caso migliore.

Implementazione bubble sort in Python

Implementiamo la soluzione all’algortimo bubble sort in Python in maniera diversa rispetto agli altri linguaggi di programmazione. Questo perchè per lo scambio delle variabili in Python non è necessaria una variabile di appoggio temporanea.

In questa guida tratto l’argomento dello scambio delle variabili. Come scambiare il valore delle variabili

Dunque non sarà necessaria questa operazione:

temp = a;
a = b;
b = temp;

Ma basterà semplicemente scrivere:

a,b = b,a

Questa procedura, detta assegnazione simultanea, mi consente di snellire l’algoritmo bubble sort in Python.

def bubbleSort(array):
for j in range(0, len(array)-1):
for i in range(0, len(array)-1):
if array[i] >array[i+1]:
array[i], array[i+1] = array[i+1], array[i]

array_numbers = [54,26,93,17,77,31,44,55,20]
bubbleSort(array_numbers)

print(array_numbers)

L’algoritmo è molto semplice, basandosi sul confronto di elementi adiacenti.

Ma se l’algoritmo fosse ordinato? In ogni caso dovrei ripetere il ciclo esterno sempre n-1 volte. Possiamo pensare allora a fare delle ottimizzazioni all’algoritmo proposto.

Ottimizzazione bubble sort in Python – ordinamento per scambio con sentinella

Possiamo pensare di interrompere il ciclo for esterno, con un break, se al termine del primo ciclo interno non si è fatto alcuno scambio. Per questo scopo utilizziamo una variabile di appoggio chiamata flag, che inizializziamo a 0. Dopo, cambiamo il valore di questa variabile se nel ciclo interno si effettua almeno uno scambio. In alternativa a 0 ed 1 posso usare una variabile booleana.

Ecco il codice di esempio:

def bubbleSort(array):
for j in range(0, len(array)-1):
flag = False
for i in range(0, len(array)-1):
if array[i] >array[i+1]:
array[i], array[i+1] = array[i+1], array[i]
flag = True
if not(flag):
break

array_numbers = [54,26,93,17,77,31,44,55,20]
bubbleSort(array_numbers)

print(array_numbers)

Seconda ottimizzazione dell’algoritmo bubble sort in Python

Possiamo ottimizzare l’algoritmo bubble sort riflettendo sul fatto che ad ogni incremento di j, almeno gli ultimi j+1 elementi sono già stati ordinati. Questo in considerazione del fatto che ad ogni iterazione, l’elemento più grande è stato spostato verso destra.

Quindi ad ogni iterazione accorciamo il ciclo dei confronti. Infatti all’n-esima iterazione si può fare a meno di toccare gli ultimi n-1 elementi che ormai sono nella loro posizione definitiva. Dunque decrementiamo n di uno ad ogni iterazione (- -n), in modo da diminuire di 1, di volta in volta, il numero dei confronti effettuati.

Ecco dunque il codice completo dell’algoritmo ottimizzato:

def bubbleSort(array):
len_array = len(array)
for j in range(0, len_array-1):
flag = False
for i in range(0, len_array-1):
if array[i] >array[i+1]:
array[i], array[i+1] = array[i+1], array[i]
flag = True
len_array = len_array – 1
if not(flag):
break

array_numbers = [54,26,93,17,77,31,44,55,20]
bubbleSort(array_numbers)

Terza ottimizzazione dell’algoritmo bubble sort in Python

Un’ulteriore ottimizzazione all’algoritmo bubble sort in Python può essere sviluppata in considerazione del fatto che il ciclo interno si interrompe proprio dove è avvenuto lo scambio. Quindi, dopo ogni iterazione più elementi si trovano nella posizione definitiva e si può evitare di ordinarli nuovamente.

Occorre memorizzare la posizione ( i+1) dell’ultimo scambio effettuato in una variabile che chiameremo ad esempio pos. Dopo assegniamo alla lunghezza dell’array il valore di pos.

Ecco una possibile implementazione dell’algoritmo ottimizzato:

def bubbleSort(array):
len_array = len(array)
for j in range(0, len_array-1):
flag = False
for i in range(0, len_array-1):
if array[i] >array[i+1]:
array[i], array[i+1] = array[i+1], array[i]
flag = True
pos = i + 1
if not(flag):
break
else:
len_array = pos

print(i,j)

array_numbers = [54,26,93,17,77,31,44,55,20]
bubbleSort(array_numbers)

print(array_numbers)

Conclusioni

In questa lezione ho realizzato alcune implementazioni dell’algoritmo bubble sort in Python, cercando di ottimizzare un algoritmo semplice da implementare, ma lento. Nelle prossime lezioni spiegherò altri algoritmi di ordinamento.

Alcuni link utili

Indice tutorial sul linguaggio Python

1 – Introduzione al linguaggio Python

2 – Le variabili

3 – Operatori aritmetici e di assegnazione

4 – Stringhe

5 – Casting

6 – Input e print

7 – Primi esercizi in Python

8 – Errori in Python

9 – Script Python

10 – Scambio di variabili

11 – Modulo math

Vuoi rimanere aggiornato sulle nuove tecnologie per la Didattica e ricevere suggerimenti per attività da fare in classe?

Sei un docente?

soloscuola.it la prima piattaforma
No Profit gestita dai

Volontari Per la Didattica
per il mondo della Scuola. 

 

Tutti i servizi sono gratuiti. 

Associazione di Volontariato Koinokalo Aps

Ente del Terzo Settore iscritta dal 2014
Tutte le attività sono finanziate con il 5X1000