1#
a) Verilen n elemanlı, 1 boyutlu A dizisinin elemanlarının sırasını tersine çevirip, B dizisine atayan kod yazın. (A dizisinin tanımlı olarak verildiğini ve tam sayılardan oluştuğunu varsayın. Normal bir Python listesi veya numpy dizisi olabilir.)
b) Tanımlanmış bir x değerinin A dizisinin kaçıncı elemanı olduğunu bulan bir kod yazın. (Eğer dizide birden fazla x değerine sahip eleman varsa, ilk bulduğunun sırasını (indisini) yazsın; eğer dizide x değeri yoksa -1 yazsın)
Show code cell content
# Rastgele sayıda eleman içeren bir dizi oluşturalım
# (bunun, soruda verilmiş olduğu varsayılıyor, yani
# çözüme dahil değil ;)
n = np.random.randint(5,21)
# n = len(A)
A = np.random.randint(-7,16,n)
A
array([-5, 4, -2, -7, -6, 14, -1, 12, 12, 1, 9, -1, 7, 5, -2, 13])
Show code cell content
# a
B = A[::-1]
B
array([13, -2, 5, 7, -1, 9, 1, 12, 12, -1, 14, -6, -7, -2, 4, -5])
Show code cell content
# A'nın içerisinden rastgele bir eleman çekip,
# x_var'ı bu şekilde tanımlayalım; A'da olmayan bir elemanı da
# x_yok olarak tanımlayalım
# (bunun, soruda verilmiş olduğu varsayılıyor, yani
# çözüme dahil değil ;)
x_var = A[np.random.randint(0,n)]
x_yok = 999
x_var,x_yok
(-7, 999)
Show code cell content
# b
x = x_var # x'in olduğu durum
#x = x_yok # x'in olmadığı durum
for i in range(n):
flag_bulundu = False
if(A[i] == x):
print(i,". eleman = ",x)
flag_bulundu = True
break
if(flag_bulundu == False):
print(-1)
3 . eleman = -7
Alternatif Çözümler#
Show code cell content
# a (alternatif)
B = []
for i in range(n-1,-1,-1):
B.append(A[i])
B
[13, -2, 5, 7, -1, 9, 1, 12, 12, -1, 14, -6, -7, -2, 4, -5]
Show code cell content
# a (alternatif)
B = []
for i in range(n):
B.append(A[n-i-1])
B
[13, -2, 5, 7, -1, 9, 1, 12, 12, -1, 14, -6, -7, -2, 4, -5]
Show code cell content
# b (alternatif, Python listesi kullanıldığı varsayılırsa)
x = x_var # x'in olduğu durum
#x = x_yok # x'in olmadığı durum
A_list = list(A)
if(x in A_list):
print(A_list.index(x))
else:
print(-1)
3
Show code cell content
# b (alternatif, numpy dizisi kullanıldığı varsayılırsa)
x = x_var # x'in olduğu durum
#x = x_yok # x'in olmadığı durum
A_np = np.array(A)
filtre = A_np == x
if(filtre.sum()>0):
print(np.arange(n)[filtre][0])
else:
print(-1)
3
2#
(6x7)’lik, değerleri [-1,10] aralığında, rastgele tam sayılardan oluşan bir A matrisi üretip, ortalamasını hesaplayan kod yazın. (Örneğin, bütün elemanları toplayıp, eleman sayısına bölün)
Show code cell content
A = np.random.randint(-1,11,(6,7))
m,n = A.shape
A,m,n
(array([[ 9, 7, 4, 3, -1, 7, 7],
[ 9, 2, 6, 8, 7, 4, 4],
[ 7, 0, 8, 1, 6, 3, 1],
[ 3, -1, 0, 2, 8, 5, 9],
[ 7, 4, 10, 5, 2, 4, 10],
[-1, 5, 5, 9, 8, 9, 2]]),
6,
7)
Show code cell content
toplam = 0
for i in range(m):
for j in range(n):
toplam = toplam + A[i,j]
ortalama = toplam / (m*n)
print(ortalama)
4.928571428571429
Alternatifler#
Show code cell content
# sum() fonksiyonu ile de kolayca çözülebilir
toplam = A.sum()
ortalama = toplam/A.size
ortalama
4.928571428571429
Derste mean() fonksiyonunu görmemiş olsak da, bazı arkadaşlar o şekilde çözmüş olabileceklerinden, o doğrudan çözümü de paylaşayım:
Show code cell content
# Derste görmediğimiz mean() fonksiyonu ile daha da pratik
A.mean()
4.928571428571429
3#
doğrularının kesiştiği noktayı bulup, bileşenlerini x0 ve y0 değişkenlerine atayan kod yazınız.
Show code cell content
# Denklemleri düzenlersek:
# 3x + y = 4
# 2x + 3y = 1
# Katsayılar matrisi
A = np.array([[3,1],[2,3]])
# Değerler vektörü
b = np.array([4,1])
x0,y0 = np.linalg.solve(A,b)
x0,y0
(1.5714285714285714, -0.7142857142857142)
Alternatif#
Show code cell content
# Eşitliğin iki tarafını da soldan A'nın tersiyle
# çarpmak suretiyle
x0,y0 = np.dot(np.linalg.inv(A),b)
x0,y0
(1.5714285714285714, -0.7142857142857142)
4#
3. soruda denklemleri verilen doğruları \(x\in[0,5]\) aralığında çizdiren kod yazınız (doğrular düz çizgi şeklinde ve farklı renklerde olsunlar).
Bonus: 3. soruda bulduğunuz kesişim noktasını grafikte yıldız şeklinde işaretleyin.
Show code cell content
x = np.linspace(0,5,300)
y1 = 4-3*x
y2 = (1-2*x)/3
plt.plot(x,y1,"b-")
plt.plot(x,y2,"g-")
# Bonus
plt.plot(x0,y0,"r*")
plt.show()
5#
1000’e kadar olan asal sayıları bulup asal_sayilar dizisinde biriktiren kod yazın.
Show code cell content
asal_sayilar = [2]
for i in range(3,1001):
#print(i,"**")
flag_asal_degil = 0
for kucuk in range(2,i):
#print(kucuk,sep=",")
if(i % kucuk == 0):
#print("Bölündü! Asal sayı olamaz! 🙀")
flag_asal_degil = 1
break
if(flag_asal_degil == 0):
asal_sayilar.append(i)
#print()
asal_sayilar
[2,
3,
5,
7,
11,
13,
17,
19,
23,
29,
31,
37,
41,
43,
47,
53,
59,
61,
67,
71,
73,
79,
83,
89,
97,
101,
103,
107,
109,
113,
127,
131,
137,
139,
149,
151,
157,
163,
167,
173,
179,
181,
191,
193,
197,
199,
211,
223,
227,
229,
233,
239,
241,
251,
257,
263,
269,
271,
277,
281,
283,
293,
307,
311,
313,
317,
331,
337,
347,
349,
353,
359,
367,
373,
379,
383,
389,
397,
401,
409,
419,
421,
431,
433,
439,
443,
449,
457,
461,
463,
467,
479,
487,
491,
499,
503,
509,
521,
523,
541,
547,
557,
563,
569,
571,
577,
587,
593,
599,
601,
607,
613,
617,
619,
631,
641,
643,
647,
653,
659,
661,
673,
677,
683,
691,
701,
709,
719,
727,
733,
739,
743,
751,
757,
761,
769,
773,
787,
797,
809,
811,
821,
823,
827,
829,
839,
853,
857,
859,
863,
877,
881,
883,
887,
907,
911,
919,
929,
937,
941,
947,
953,
967,
971,
977,
983,
991,
997]