Feladat 1:
Készíts egy listát, amelyben 100 db -1000..2000 közötti számot tárolsz.
– Mennyi a számok összege?
– Melyik a legkisebb szám? Hányszor fordul elő a listában?
– Melyik a 2. legnagyobb szám? (igen, ehhez rendezni kellene..)
– Kérj be egy számot a felhasználótól, és nézd meg, szerepel-e a listában! Ha igen, hányadik
helyen?
– Hány db olyan szám van a listában, amely 3-mal osztható?
– Hány db olyan szám van, amely 7-tel nem osztható?
– Hány db olyan szám van, ami 3-mal és 7-tel sem osztható?
– Hány db különböző szám van a listában? Melyik hányszor szerepel?
Ahol lehetett, ott a beépített függvényeket használtam: sum, in, count, min
import random
# Lista létrehozása 10 db -1000..2000 közötti számmal
lista = [random.randint(-1000, 2000) for i in range(100)]
# 2. feladat: Számok összege
szamok_osszege = sum(lista)
print(f"A számok összege: {szamok_osszege}")
# 3. feladat: Legkisebb szám és előfordulási gyakorisága
legkisebb_szam = min(lista)
legkisebb_szam_db = lista.count(legkisebb_szam)
print(f"A legkisebb szám: {legkisebb_szam}, előfordulási gyakorisága: {legkisebb_szam_db}")
# 4. feladat: 2. legnagyobb szám
masodik_legnagyobb_szam = sorted(lista)[-2]
print(f"A 2. legnagyobb szám: {masodik_legnagyobb_szam}")
# 5. feladat: Adott szám megtalálása a listában
bekert_szam = int(input("Kérek egy számot: "))
if bekert_szam in lista:
bekert_szam_indexe = lista.index(bekert_szam)
print(f"A(z) {bekert_szam} szerepel a listában, {bekert_szam_indexe+1}. helyen van.")
else:
print(f"A(z) {bekert_szam} nem szerepel a listában.")
# 6. feladat: 3-mal osztható számok száma
oszthato_harommal_db = sum(1 for num in lista if num % 3 == 0)
print(f"{oszthato_harommal_db} db szám osztható 3-mal.")
# 7. feladat: 7-tel nem osztható számok száma
oszthato_hettel_db = sum(1 for num in lista if num % 7 != 0)
print(f"{oszthato_hettel_db} db szám nem osztható 7-tel.")
# 8. feladat: 3-mal és 7-tel sem osztható számok száma
harommal_hettel_nem_oszthato_db = sum(1 for num in lista if num % 3 != 0 and num % 7 != 0)
print(f"{harommal_hettel_nem_oszthato_db} db szám nem osztható 3-mal és 7-tel sem.")
# 9. feladat: Különböző számok száma és előfordulási gyakoriságuk
# halmaz, ami csak egyedi számokat tartalmaz, ezzek a legegyszerűbb
egyedi_szamok = set(lista)
#elorofulasok_szama - lista, ami a számokat és azok darabszámát tartalmazza
elofordulas_szama = [(num, lista.count(num)) for num in egyedi_szamok]
print(f"{len(egyedi_szamok)} különböző szám van a listában:")
for num, count in elofordulas_szama:
print(f"{num} szám: {count} db")
#ugyanez a feladat listával, mert még nem tanultuk a halmazokat
egyedi_szamok = []
for i in lista:
if i not in egyedi_szamok:
egyedi_szamok.append(i)
print("Nem ismétlődő elemek:", egyedi_szamok)
Feladat 2.
- Készíts egy listát, melyben 50 db, véletlen -100 .. 100 közötti egész számot tárolsz.
- Írd ki a lista elemeit, 5 sorba, vesszővel elválasztva! Kimenet.txt-be is!
- Rendezd a lista elemeit növekvő sorrendbe!
- Írd ki így is a lista elemeit, 2 sorba, pontosvesszővel elválasztva!
- Melyik a lista legnagyobb eleme? Írasd ki!
- Hányszor fordul elő a lista legnagyobb eleme? Írasd ki!
- Mennyi a lista elemeinek átlaga? (vigyázz az átlag típusára!)
- Mennyi a lista elemeinek összege?
- Kérj be egy számot a felhasználótól! (Ha ez nem sikerül, akkor legyen a szam=12)
- Az bekért szám szerepel-e a listában? Ha igen, hányszor?
Ügyelj rá, hogy a felhasználó mindig tudja, mit kérsz tőle, mit írsz ki neki!
import random
# 1.: lista létrehozása
lista = [random.randint(-100, 100) for i in range(50)]
# 2.: lista kiírása 5 sorba
with open("Kimenet.txt", "w") as f:
for i in range(len(lista)):
print(lista[i], end=", ")
f.write(str(lista[i]) + ", ")
if (i + 1) % 10 == 0:
print()
f.write("\n")
print()
f.write("\n")
# 3.: lista rendezése
lista.sort()
# 4.: rendezett lista kiírása 2 sorba
with open("Kimenet.txt", "a") as f:
for i in range(len(lista)):
print(lista[i], end="; ")
f.write(str(lista[i]) + "; ")
if (i + 1) % 25 == 0:
print()
f.write("\n")
print()
f.write("\n")
# 5.: legnagyobb és legkisebb elem kiírása
max_elem = max(lista)
min_elem = min(lista)
print("Legnagyobb elem: ", max_elem)
print("Legkisebb elem: ", min_elem)
# 6.: legnagyobb elem előfordulásainak száma
max_db = lista.count(max_elem)
print("A lista legnagyobb eleme", max_elem, "ennyiszer fordul elő:", max_db)
# 7.: lista elemeinek átlaga
atlag = sum(lista) / len(lista)
print("A lista elemeinek átlaga:", atlag)
# 8.: lista elemeinek összege
osszeg = sum(lista)
print("A lista elemeinek összege:", osszeg)
# 9.: szám bekérése a felhasználótól
try:
szam = int(input("Kérem adjon meg egy számot: "))
except:
szam = 12
# 10.: szám ellenőrzése a listában
if szam in lista:
db = lista.count(szam)
index = lista.index(szam)
print("A bekért szám: ", szam, "szerepel a listában", db, "alkalommal, az első indexe:", index)
else:
print(szam, "nem szerepel a listában")
ELTE mester online programozási feladatbank
Tudnivalók, tanácsok a használatához
2023 Nemes Tihamér programozás versenyre gyakorló feladatok
Állatértékesítés
Egy állatkereskedő N napon keresztül forgalmaz állatokat. Minden napra ismerjük, hogy addig
mekkora bevétele volt. Készíts programot, amely megadja, hogy a kereskedő hány napon adott el állatot!
Bemenet
A standard bemenet első sorában található a napok száma (1≤N≤100) van. Az ezt követő
N sorban pedig az addigi bevétel értékei vannak (0≤Bi≤1 000 000).
Kimenet
A standard kimenet egyetlen sorába ki kell írni az eladások számát!
Példa
Bemenet
6
10000
10000
10000
15000
15000
17000
Kimenet: 3
with open('be1.txt') as fajl:
# az első sor tartalmazza az adatok számát
n = int(fajl.readline().strip())
# az első n sor a bevételi adatokat tartalmazza
bevetelek = [int(fajl.readline().strip()) for i in range(n)]
# a bevétel számláló kezdeti értéke 0
db = 0
# a bevétel számláló értéke akkor növekszik, ha a jelenlegi bevétel
# eltér az előző napi bevételtől (kivéve az első napot, azt megnézem külön)
if bevetelek[0] > 0:
db += 1
elozo_bevetel = None
for i in bevetelek:
if elozo_bevetel is not None and i != elozo_bevetel:
db += 1
elozo_bevetel = i
print(f"Bevétel volt {db} alkalommal.")
# kiírom fájlba
with open("ki.txt", "w") as f:
f.write(str(db))
A versenyen a standard ki és bemenetet kell használni! A módosított program:
from sys import stdin, stdout
def main():
n = int(stdin.readline().strip())
bevetelek = [int(stdin.readline().strip()) for i in range(n)]
db = 0
if bevetelek[0] > 0:
db += 1
elozo_bevetel = None
for i in bevetelek:
if elozo_bevetel is not None and i != elozo_bevetel:
db += 1
elozo_bevetel = i
stdout.write(str(db))
main()
Évek mikor több bor készült, mint azelőtt
Egy pincészet egyféle boráról évente tárolja, hogy mennyit készített belőle és hány forintért árusítja.
Írj programot, amely megadja azon évek számát és sorszámait, amikor többet készítettek, mint bármely korábbi évben!
Bemenet
A standard bemenet első sorában az évek száma (1≤N≤100), alatta soronként egy-egy év bor mennyisége és ára van (1≤Mi,Ai≤10 000).
Kimenet
A standard kimenet egyetlen sorába azon évek számát és sorszámait kell kiírni, amikor többet készítettek, mint bármely korábbi évben (ha volt egyáltalán korábbi év)! A sorszámokat növekvő sorrendben, egy-egy szóközzel elválasztva kell kiírni! Ha egyetlen ilyen év sincs, akkor egyetlen 0 legyen a kimenet!
Példa
Bemenet
6
500 1500
1900 2000
2000 1500
200 3800
300 1000
2100 3000
Kimenet
3 2 3 6
Magyarul: 3 alkalommal volt nagyobb az érték, mint az előtte levők. Ezeknek az értékeknek a helye: 2. elem, 3.elem, 6. elem. Lehetne konkrétabban fogalmazni…
A jelenlegi megoldás nem ad maximális pontot a tesztre!
with open("be1.txt", "r") as fajl:
# Az első sor az elemszám
n = int(fajl.readline().strip())
# Az első elemek tárolása listában
lista = []
for i in range(n):
sor = fajl.readline().strip().split()
lista.append(int(sor[0]))
print(lista)
db = 0
elemek=[]
for i in range(1, len(lista)):
if lista[i] > max(lista[:i]):
db += 1
elemek.append(i+1)
elemek.insert(0,db)
print(elemek)
with open("ki.txt", "w") as fajl:
fajl.write(" ".join(str(i) for i in elemek))
Módosítva standard kimenetre, és bemenetre:
from sys import stdin, stdout
def main():
n = int(stdin.readline().strip())
lista = []
for i in range(n):
sor = stdin.readline().strip().split()
lista.append(int(sor[0]))
db = 0
elemek=[]
for i in range(1, len(lista)):
if lista[i] > max(lista[:i]):
db += 1
elemek.append(i+1)
elemek.insert(0,db)
stdout.write(" ".join(str(i) for i in elemek))
main()