1453 - Să se șteargă dintr-un vector toate elementele pare.

De la Universitas MediaWiki

Sursa: stergere1


Cerinţă

Se dă un vector cu n elemente numere naturale. Să se șteargă din vector toate elementele pare.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spaţii, reprezentând elementele vectorul.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte!", apoi se va afișa noul vector, obținut în urma eliminării numerelor pare. În cazul în care datele nu respectă restricțiile, se va afișa mesajul "Datele introduse nu sunt corecte!".

Restricţii şi precizări

  • 0 <= n <= 1000
  • valorile elementelor șirului vor fi cuprinse între -2^30 și 2^30

Exemple

Exemplul 1

Intrare
Introduceti numarul de elemente: 6
Introduceti 6 elem separate prin spatiu:7 9 4 2 1 6
Ieșire
Datele introduse sunt corecte!
Noul vector este:  ['7', '9', '1']

Exemplul 2

Intrare
Introduceti numarul de elemente: 1001
Ieșire
Datele introduse sunt incorecte!

Exemplul 3

Intrare
Introduceti numarul de elemente: 10
Introduceti 10 elem separate prin spatiu:2 2 2 2 2 2 2 2 3 1
Ieșire
Datele introduse sunt corecte!
Noul vector este:  ['3', '1']

Rezolvare

def is_integer(value):
    return value.isdigit()


def verificare_nr_elemente(n):
    if is_integer(n):
        if 0 <= int(n) <= 1000:
            return n
        else:
            print("Datele introduse sunt incorecte!")
            exit()
    else:
        print("Datele introduse sunt incorecte!")
        exit()


def verificare_vector(n, vector):
    if len(vector) != int(n):
        print("Datele introduse sunt incorecte!")
        exit()
    else:
        for i in vector:
            if is_integer(i):
                if -2**30 <= int(i) <= 2**30:
                    continue
                else:
                    print("Datele introduse sunt incorecte!")
                    exit()
            else:
                print("Datele introduse sunt incorecte!")
                exit()


def este_par(nr):
    if nr % 2 == 1:
        return False
    return True


def sterge_pare(vector):
    return [nr for nr in vector if not este_par(int(nr))]


if __name__ == '__main__':
    n = input("Introduceti numarul de elemente: ")
    verificare_nr_elemente(n)
    elem = input(f"Introduceti {n} elem separate prin spatiu:").split()
    verificare_vector(n, elem)
    print("Datele introduse sunt corecte!")
    vector_dupa_eliminare = sterge_pare(elem)
    print("Noul vector este: ", vector_dupa_eliminare)

Explicație

Acest cod implementează o soluție pentru problema eliminării numerelor pare dintr-un vector. Utilizatorul introduce un număr de elemente și apoi elementele vectorului. Se verifică dacă datele introduse sunt corecte și, în caz afirmativ, se elimină numerele pare și se afișează noul vector.

Funcția is_integer(value) verifică dacă un caracter reprezintă un număr întreg și returnează True dacă este, altfel returnează False.

Funcția verificare_nr_elemente(n) verifică dacă numărul de elemente n este un număr întreg între 0 și 1000 și returnează acest număr. Dacă n nu este valid, se afișează un mesaj de eroare și se oprește programul.

Funcția verificare_vector(n, vector) verifică dacă vectorul are n elemente și dacă fiecare element este un număr întreg între -2^30 și 2^30. Dacă vectorul este valid, nu se întoarce nimic. Dacă nu, se afișează un mesaj de eroare și se oprește programul.

Funcția este_par(nr) primește un număr întreg și verifică dacă este par. Dacă numărul este par, returnează True, altfel returnează False.

Funcția sterge_pare(vector) primește un vector de numere întregi și elimină numerele pare din vector. Rezultatul este returnat sub formă de listă.

Instrucțiunea if __name__ == '__main__': verifică dacă programul este rulat ca script și, în caz afirmativ, apelează funcțiile verificare_nr_elemente(n), verificare_vector(n, elem) și sterge_pare(elem) pentru a verifica datele introduse, elimina numerele pare și afișa noul vector. Se afișează și un mesaj care confirmă că datele introduse sunt corecte înainte de a afișa noul vector.