```html Python - 20 de probleme dificile

Python – 20 de probleme simple

Clasa a IX-a · Matematică-Informatică

Algoritmi · Variabile · Tipuri · Caractere · print() · input() · Conversii · Operatori · Comparații · if · Logică · Urmărire

Probleme propuse

Problemele folosesc numai noțiunile studiate în această etapă. Nu sunt folosite liste, vectori, matrice, bucle, indexare, slicing, split(), map() sau metode de șiruri care nu au fost încă introduse.

Problema 1 – Transformări de tip

Se citește un număr întreg n.

Afișați, pe linii separate:

  1. valoarea lui n transformată în float;
  2. valoarea lui n transformată în str;
  3. tipul valorii obținute la prima conversie;
  4. tipul valorii obținute la a doua conversie.

Problema 2 – Real, întreg și caracter

Se citește un număr real pozitiv x.

Se elimină partea zecimală a numărului folosind int().

Numărul întreg obținut reprezintă un cod Unicode valid. Afișați caracterul corespunzător acelui cod.

Problema 3 – Cifră și expresie algebrică

Se citește un singur caracter care reprezintă o cifră.

Transformați caracterul în număr întreg n.

Calculați valoarea expresiei:

n ** 2 + 3 * n + 1

Afișați rezultatul.

Problema 4 – Caracter și succesor

Se citește un caracter.

Afișați:

  1. codul Unicode al caracterului;
  2. caracterul care are codul Unicode cu o unitate mai mare.

Se garantează că există caracterul corespunzător codului următor.

Problema 5 – Afișare cu separator

Se citesc trei numere întregi a, b și c.

Afișați cele trei valori pe aceeași linie, astfel încât între două valori consecutive să apară exact două caractere -.

Pentru valorile 4, 7 și 12, afișarea trebuie să fie:

4--7--12

Problema 6 – O singură instrucțiune print()

Se citesc trei numere întregi.

Folosind o singură instrucțiune print(), afișați cele trei numere pe trei linii diferite.

Problema 7 – Modificarea succesivă a variabilelor

Se consideră programul:

a = 8
b = 5
c = a + b
a = c - 2
b = a + c
c = b - a

print(a, b, c)

Determinați, fără a executa programul, valorile finale ale variabilelor a, b și c.

Precizați exact ce va afișa programul.

Problema 8 – Expresie aritmetică

Se citesc trei numere întregi a, b și c, unde c este nenul.

Calculați și afișați valoarea expresiei:

(a + b) * c - a ** 2 + b // c + b % c

Respectați ordinea de efectuare a operațiilor.

Problema 9 – Cât și rest

Se citesc două numere întregi pozitive n și d, cu d != 0.

Determinați câtul împărțirii întregi a lui n la d și restul împărțirii.

Afișați cele două valori pe linii separate.

Problema 10 – Prioritatea operatorilor

Se citesc trei numere întregi pozitive a, b și c, cu c != 0.

Calculați:

(a + b ** 2) // c + (a * b) % c

Afișați rezultatul.

Problema 11 – Apartenența la un interval

Se citește un număr întreg x.

Afișați DA dacă x aparține intervalului închis [-15, 28] și NU în caz contrar.

Condiția trebuie construită folosind operatorul logic and.

Problema 12 – În afara unui interval

Se citește un număr întreg x.

Afișați DA dacă x se află în afara intervalului închis [10, 30].

În rezolvare trebuie folosit operatorul logic not.

Problema 13 – Număr pozitiv și par

Se citește un număr întreg n.

Afișați DA dacă numărul este simultan strict pozitiv și par.

În caz contrar, afișați NU.

Problema 14 – Condiție alternativă

Se citește un număr întreg n.

Afișați DA dacă cel puțin una dintre următoarele condiții este adevărată:

  • n este negativ;
  • n este divizibil cu 5.

În caz contrar, afișați NU.

Problema 15 – Clasificarea unui număr

Se citește un număr întreg n.

Afișați:

  • NEGATIV, dacă n < 0;
  • ZERO, dacă n == 0;
  • POZITIV PAR, dacă n > 0 și este par;
  • POZITIV IMPAR, dacă n > 0 și este impar.

Problema 16 – Maximul a trei numere

Se citesc trei numere întregi a, b și c.

Determinați și afișați cel mai mare dintre cele trei numere.

Nu utilizați funcția max(). Rezolvarea trebuie să utilizeze comparații și instrucțiuni condiționale.

Problema 17 – Ordinea a trei numere

Se citesc trei numere întregi a, b și c.

Afișați:

  • CRESCATOR, dacă a < b < c;
  • DESCRESCATOR, dacă a > b > c;
  • NICIUNA, în orice alt caz.

Ordinea este strictă, deci două valori egale nu formează o ordine crescătoare sau descrescătoare.

Problema 18 – Clasificarea unui caracter

Se citește un singur caracter. Se garantează că acesta este fie o literă englezească, fie o cifră.

Folosind codul Unicode al caracterului, determinați dacă acesta este:

  • o literă mare;
  • o literă mică;
  • o cifră.

Nu utilizați metode de șiruri.

Problema 19 – Succesor circular

Se citește o literă mică englezească.

Afișați litera care urmează în alfabet.

Pentru litera z, următoarea literă este considerată a.

Utilizați ord(), chr() și instrucțiuni condiționale.

Problema 20 – Urmărirea unui program

Fără a executa programul, determinați exact ce se va afișa:

x = 7
y = 3

x = x + y
y = x - y
x = x - y

if x > y and x % 2 == 0:
    z = x // y
elif x < y or y % 2 == 0:
    z = x + y
else:
    z = x - y

print(x, y, z, sep="---")

Pentru justificare, urmăriți valorile lui x, y și z după fiecare instrucțiune relevantă.

Rezolvări

Problema 1 – Transformări de tip

Se citește un număr întreg n.

Afișați, pe linii separate:

  1. valoarea lui n transformată în float;
  2. valoarea lui n transformată în str;
  3. tipul valorii obținute la prima conversie;
  4. tipul valorii obținute la a doua conversie.

Rezolvare

n = int(input())

x = float(n)
y = str(n)

print(x)
print(y)
print(type(x))
print(type(y))

Variabila n este de tip int.

Prin float(n) obținem un număr real, iar prin str(n) obținem un text.

Prin urmare:

x → float
y → str

Problema 2 – Real, întreg și caracter

Se citește un număr real pozitiv x.

Se elimină partea zecimală a numărului folosind int().

Numărul întreg obținut reprezintă un cod Unicode valid. Afișați caracterul corespunzător acelui cod.

Rezolvare

x = float(input())

n = int(x)
c = chr(n)

print(c)

Mai întâi citim un număr real.

int(x) elimină partea zecimală. Nu realizează rotunjirea.

Apoi folosim chr() pentru a transforma codul întreg în caracter.

De exemplu:

x = 65.9

int(x) → 65
chr(65) → "A"

Problema 3 – Cifră și expresie algebrică

Se citește un singur caracter care reprezintă o cifră.

Transformați caracterul în număr întreg n.

Calculați valoarea expresiei:

n ** 2 + 3 * n + 1

Afișați rezultatul.

Rezolvare

c = input()

n = int(c)

rezultat = n ** 2 + 3 * n + 1

print(rezultat)

input() returnează un str. De aceea, caracterul citit trebuie transformat în int.

Pentru c = "4":

n = 4

4 ** 2 + 3 * 4 + 1
= 16 + 12 + 1
= 29

Problema 4 – Caracter și succesor

Se citește un caracter.

Afișați:

  1. codul Unicode al caracterului;
  2. caracterul care are codul Unicode cu o unitate mai mare.

Se garantează că există caracterul corespunzător codului următor.

Rezolvare

c = input()

cod = ord(c)
urmator = chr(cod + 1)

print(cod)
print(urmator)

ord(c) transformă caracterul în codul său Unicode.

Adăugăm 1 la cod și folosim chr() pentru a obține caracterul corespunzător.

Problema 5 – Afișare cu separator

Se citesc trei numere întregi a, b și c.

Afișați cele trei valori pe aceeași linie, astfel încât între două valori consecutive să apară exact două caractere -.

Pentru valorile 4, 7 și 12, afișarea trebuie să fie:

4--7--12

Rezolvare

a = int(input())
b = int(input())
c = int(input())

print(a, b, c, sep="--")

Parametrul sep reprezintă separatorul dintre valorile transmise lui print().

Deoarece avem sep="--", între valori apar exact două caractere -.

Problema 6 – O singură instrucțiune print()

Se citesc trei numere întregi.

Folosind o singură instrucțiune print(), afișați cele trei numere pe trei linii diferite.

Rezolvare

a = int(input())
b = int(input())
c = int(input())

print(a, b, c, sep="\n")

\n reprezintă trecerea la o linie nouă.

Prin urmare, folosirea lui ca separator determină afișarea fiecărei valori pe o linie separată.

Problema 7 – Modificarea succesivă a variabilelor

Se consideră programul:

a = 8
b = 5
c = a + b
a = c - 2
b = a + c
c = b - a

print(a, b, c)

Determinați, fără a executa programul, valorile finale ale variabilelor a, b și c.

Precizați exact ce va afișa programul.

Rezolvare

Instrucțiune a b c
Inițial 8 5 —
c = a + b 8 5 13
a = c - 2 11 5 13
b = a + c 11 24 13
c = b - a 11 24 13

Programul afișează:

11 24 13

Problema 8 – Expresie aritmetică

Se citesc trei numere întregi a, b și c, unde c este nenul.

Calculați și afișați valoarea expresiei:

(a + b) * c - a ** 2 + b // c + b % c

Respectați ordinea de efectuare a operațiilor.

Rezolvare

a = int(input())
b = int(input())
c = int(input())

rezultat = (a + b) * c - a ** 2 + b // c + b % c

print(rezultat)

Ordinea operațiilor este:

  1. paranteze;
  2. puteri;
  3. înmulțire, împărțire, împărțire întreagă și rest;
  4. adunare și scădere.

Problema 9 – Cât și rest

Se citesc două numere întregi pozitive n și d, cu d != 0.

Determinați câtul împărțirii întregi a lui n la d și restul împărțirii.

Afișați cele două valori pe linii separate.

Rezolvare

n = int(input())
d = int(input())

cat = n // d
rest = n % d

print(cat)
print(rest)

Operatorul // calculează câtul întreg, iar operatorul % calculează restul.

Pentru exemplul:

17 // 5 = 3
17 % 5 = 2

Problema 10 – Prioritatea operatorilor

Se citesc trei numere întregi pozitive a, b și c, cu c != 0.

Calculați:

(a + b ** 2) // c + (a * b) % c

Afișați rezultatul.

Rezolvare

a = int(input())
b = int(input())
c = int(input())

rezultat = (a + b ** 2) // c + (a * b) % c

print(rezultat)

Puterea are prioritate mai mare decât înmulțirea și împărțirea.

Parantezele sunt evaluate înaintea celorlalte operații.

Problema 11 – Apartenența la un interval

Se citește un număr întreg x.

Afișați DA dacă x aparține intervalului închis [-15, 28] și NU în caz contrar.

Condiția trebuie construită folosind operatorul logic and.

Rezolvare

x = int(input())

if x >= -15 and x <= 28:
    print("DA")
else:
    print("NU")

Pentru ca x să aparțină intervalului, trebuie îndeplinite simultan cele două condiții:

x >= -15
x <= 28

De aceea folosim and.

Problema 12 – În afara unui interval

Se citește un număr întreg x.

Afișați DA dacă x se află în afara intervalului închis [10, 30].

În rezolvare trebuie folosit operatorul logic not.

Rezolvare

x = int(input())

if not (x >= 10 and x <= 30):
    print("DA")
else:
    print("NU")

Expresia:

x >= 10 and x <= 30

verifică dacă numărul este în interval.

Aplicând not, obținem exact condiția opusă: numărul se află în afara intervalului.

Problema 13 – Număr pozitiv și par

Se citește un număr întreg n.

Afișați DA dacă numărul este simultan strict pozitiv și par.

În caz contrar, afișați NU.

Rezolvare

n = int(input())

if n > 0 and n % 2 == 0:
    print("DA")
else:
    print("NU")

Prima condiție verifică dacă numărul este pozitiv:

n > 0

A doua verifică dacă este par:

n % 2 == 0

Deoarece trebuie să fie adevărate ambele condiții, folosim and.

Problema 14 – Condiție alternativă

Se citește un număr întreg n.

Afișați DA dacă cel puțin una dintre următoarele condiții este adevărată:

  • n este negativ;
  • n este divizibil cu 5.

În caz contrar, afișați NU.

Rezolvare

n = int(input())

if n < 0 or n % 5 == 0:
    print("DA")
else:
    print("NU")

Avem două condiții alternative. Este suficient ca una dintre ele să fie adevărată.

De aceea folosim operatorul or.

Problema 15 – Clasificarea unui număr

Se citește un număr întreg n.

Afișați:

  • NEGATIV, dacă n < 0;
  • ZERO, dacă n == 0;
  • POZITIV PAR, dacă n > 0 și este par;
  • POZITIV IMPAR, dacă n > 0 și este impar.

Rezolvare

n = int(input())

if n < 0:
    print("NEGATIV")
elif n == 0:
    print("ZERO")
elif n % 2 == 0:
    print("POZITIV PAR")
else:
    print("POZITIV IMPAR")

Cazurile sunt verificate de sus în jos.

Dacă n este negativ, primul bloc este executat. Dacă nu, se verifică următoarea condiție și așa mai departe.

Problema 16 – Maximul a trei numere

Se citesc trei numere întregi a, b și c.

Determinați și afișați cel mai mare dintre cele trei numere.

Nu utilizați funcția max(). Rezolvarea trebuie să utilizeze comparații și instrucțiuni condiționale.

Rezolvare

a = int(input())
b = int(input())
c = int(input())

maxim = a

if b > maxim:
    maxim = b

if c > maxim:
    maxim = c

print(maxim)

Presupunem inițial că a este maximul.

Dacă b este mai mare decât valoarea memorată, actualizăm maximul.

Apoi facem aceeași verificare pentru c.

Problema 17 – Ordinea a trei numere

Se citesc trei numere întregi a, b și c.

Afișați:

  • CRESCATOR, dacă a < b < c;
  • DESCRESCATOR, dacă a > b > c;
  • NICIUNA, în orice alt caz.

Ordinea este strictă, deci două valori egale nu formează o ordine crescătoare sau descrescătoare.

Rezolvare

a = int(input())
b = int(input())
c = int(input())

if a < b and b < c:
    print("CRESCATOR")
elif a > b and b > c:
    print("DESCRESCATOR")
else:
    print("NICIUNA")

Pentru ca numerele să fie strict crescătoare trebuie să avem simultan:

a < b
b < c

De aceea folosim and.

Pentru ordinea descrescătoare procedăm analog.

Problema 18 – Clasificarea unui caracter

Se citește un singur caracter. Se garantează că acesta este fie o literă englezească, fie o cifră.

Folosind codul Unicode al caracterului, determinați dacă acesta este:

  • o literă mare;
  • o literă mică;
  • o cifră.

Nu utilizați metode de șiruri.

Rezolvare

c = input()

cod = ord(c)

if cod >= ord("A") and cod <= ord("Z"):
    print("LITERA MARE")
elif cod >= ord("a") and cod <= ord("z"):
    print("LITERA MICA")
else:
    print("CIFRA")

Verificăm intervalele de coduri Unicode.

A ... Z
a ... z
0 ... 9

Dacă valoarea se află între codurile lui A și Z, avem o literă mare.

Dacă se află între codurile lui a și z, avem o literă mică.

În orice alt caz, caracterul este o cifră.

Problema 19 – Succesor circular

Se citește o literă mică englezească.

Afișați litera care urmează în alfabet.

Pentru litera z, următoarea literă este considerată a.

Utilizați ord(), chr() și instrucțiuni condiționale.

Rezolvare

c = input()

if c == "z":
    print("a")
else:
    print(chr(ord(c) + 1))

Pentru z avem un caz special: după z urmează a.

Pentru orice altă literă mică, codul Unicode este mărit cu 1.

Problema 20 – Urmărirea unui program

Fără a executa programul, determinați exact ce se va afișa:

x = 7
y = 3

x = x + y
y = x - y
x = x - y

if x > y and x % 2 == 0:
    z = x // y
elif x < y or y % 2 == 0:
    z = x + y
else:
    z = x - y

print(x, y, z, sep="---")

Pentru justificare, urmăriți valorile lui x, y și z după fiecare instrucțiune relevantă.

Rezolvare

Valorile inițiale sunt:

x = 7
y = 3

După:

x = x + y

obținem:

x = 10
y = 3

După:

y = x - y

obținem:

x = 10
y = 7

După:

x = x - y

obținem:

x = 3
y = 7

Verificăm prima condiție:

x > y and x % 2 == 0

Prima parte este:

3 > 7
False

Prin urmare, primul bloc nu se execută.

Verificăm condiția din elif:

x < y or y % 2 == 0

Prima parte este:

3 < 7
True

Deoarece avem operatorul or, întreaga condiție este adevărată.

Se execută:

z = x + y

Deci:

z = 3 + 7
z = 10

În final:

x = 3
y = 7
z = 10

Instrucțiunea:

print(x, y, z, sep="---")

va afișa:

3---7---10
```