Netlogo ve R dillerinde daha önce gördüğümüz, veri tipleri, fonksiyonlar, kontrol yapıları ve döndüler pythın dilinin de temellerini oluşturur.
# Liste
L = [1, [1,2], 3]
print(L)
print(L[0])
print(L[1])
# Listenin uzunlugu
print(len(L))
Sadelik, karmaşadan üstündür.
a, b = 1, 8
a, b = b, a
print(a," ",b)
# Fonksiyon: Bir adi olan kod paketi
def degis(a,b):
"""Iki degiskenin degerlerini degistirir."""
a, b = b, a
return a, b
x, y = 3, 4
print("x, y = ", degis(x,y))
# Kontol
if(x > y):
print(x, ",", y, "den buyuk")
else:
print(y, ",", x, "den buyuk")
def kategori(yas):
if yas<=18:
durum="cocuk"
elif yas>65:
durum="emekli"
else:
durum="yetiskin"
return durum
yas = input("yasinizi giriniz: ")
print("\t kategoriniz: ", kategori(int(yas)))
Say = [1,2,3,4,5,6,7]
for i in Say:
print(i**2)
# range([bas,] son [,adim]) : bas varsayilan degeri 0, adim varsayilan degeri 1
for i in range(4,10,2):
print(i)
# Dongu icerisinde 'yeter' yazilana kadar 'mesajiniz nedir?' diye soran program
mesaj = ''
while mesaj != 'yeter':
mesaj = input("Mesajiniz nedir? ")
print(mesaj)
# Dosya okuma
dosyaadi = "davet-siir.txt"
with open(dosyaadi) as file_object:
siir = file_object.readlines()
for dize in siir:
print(dize)
# Dosyaya yazma
# Ekleme icin "w" (write) yerine # "a" (append) yapin,
# Yoksa uzerine yazar
dosyaadi = "en-sevdigim-dize.txt"
with open(dosyaadi, "w") as file_object:
file_object.write("Yaşamak bir ağaç gibi tek ve hür\n")
file_object.write("\tve bir orman gibi kardeşçesine")
# Simulate (or actually play) Guess the Number
# The number lies in a given range. Choose the number in the middle.
# If guess was too high, choose number in middle of lower half,
# if guess was too low, choose number in middle of upper half.
# Halve the appropriate range & repeat unti the number is correct.
# Authour: Alan Richmond, Python3.codes
binary=False # set this to True or False
lonum,hinum=1,128 # range for the number
import random as r
the_num=r.randint(lonum,hinum) # computer chooses a number randomly
print("I'm thinking of a number between",lonum,"and",hinum)
lo=1
hi=hinum
guesses=0
for i in range(lonum,hinum): # repeat this until guess is correct:
# note the int!
# guess=int(input ("What is your guess: ")) # uncomment to actually play
if binary: guess=lo+(hi-lo)//2 # integer division
else: guess=r.randint(lo,hi)
print("Guess:",guess)
guesses+=1 # add 1 to count of guesses
# check the guessed number
if guess > the_num:
print("Lower!")
hi=guess # bring down the upper bound
elif guess < the_num:
print("Higher!")
lo=guess # push up the lower bound
else: break # yay!
print("That took",guesses,"guesses")
#print("That took {0} guesses".format(guesses)) # alternative to previous line
Yaşamak bir ağaç gibi tek ve hür
ve bir orman gibi kardeşçesine
Etmenler tek ve hürdür :) ama birlikte toplumu yani birge'yi oluştururlar!
uzay = {"Star Wars": 4.5, "Superman": 3.5,"Batman": 4}
uzay["Star Wars"]
# Sozlukler
DB = {
"uzay" : {"Star Wars": 4.5, "Superman": 3.5,"Batman": 4,},
"selin" : {"Venedik": 4.5, "Paris": 3.5,"Batman": 4,},
"fatih" : {"Superman": 4,"Batman": 4},
}
print("\nUzay Begenileri: ", DB['uzay'])
print("Uzayin Star Wars filmine verdigi puan: ", DB['uzay']['Star Wars'])
# Yeni deger ekleme
DB.setdefault("Umut", {"Maymunlar Cehennemi": 4, "Babam ve Oglum": 3})
for k in DB.keys():
print(k)
for deger in DB.values():
print(deger)
# Ileri Liste Islemler
[x*5 for x in range(5)]
[x for x in range(5) if x%2 == 0]
import numpy as np
liste = np.array(range(5))
print(liste)
import math
for i in liste:
print(math.sqrt(i))
liste = liste * liste
liste
liste[-3:]
liste.shape
len(liste)
liste[2]
liste[liste > 5]
liste = np.append(liste, [25,36,49])
liste
liste = liste - 16
liste
liste[liste>0] = 1
liste[liste<0] = -1
liste
Daha fazlasi icin python ve numpy kodlari: https://s3.amazonaws.com/assets.datacamp.com/blog_assets/Numpy_Python_Cheat_Sheet.pdf
liste2 = np.zeros(8)
liste2[5:] = -1
liste2
liste + liste2
import numpy as np
np.random.seed(0) # Tekrar uretim
# 20 defa yazi-tura atalim
dizi1 = np.random.randint(2, size=20) # Bir boyutlu dizi, icinde 20 eleman var
print(dizi1)
# Agirlik matrisi
theta = np.random.randint(10, size=(3, 4)) # Two-dimensional array
# theta = theta /10
theta
print("theta boyutlar (theta.shape):", theta.shape)
print("theta butukluk (theta.size) :", theta.size)
theta[1,0]
x = [1, 2, 3, 4, 5]
print("x =", x)
print("e^x =", np.exp(x))
print("2^x =", np.exp2(x))
print("3^x =", np.power(10, x))
Farklı a değerleri için nasıl bir grafik elde ederiz? $$x_{t+1} = a x_t$$
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
def sistem(a, t = 20):
x = 1
sistem = []
for t in range(t):
x = a * x
sistem.append(a * x)
return sistem
def sistemCiz(a, t = 20, baslik = ""):
plt.figure(figsize=(10,6))
plt.plot(range(t),sistem(a),'rx-',markersize=10)
plt.grid(True)
plt.ylabel('$x_t$');
plt.xlabel('t')
plt.title(baslik)
sistemCiz(a = 1, baslik = "a = 1: Sabit") # a = 1: Sabit
sistemCiz(a = 2, baslik = "a > 1 : Artan") # a >1 : Artan
sistemCiz(a = 0.5, baslik = "0 < a < 1 : Azalan") # 0 < a < 1 : Azalan
sistemCiz(a = -1, baslik="a = -1 : Notr Salinim") # a = -1 : Notr Salinim
sistemCiz(a = -2, baslik="a < -1 : Buyuyen Salinim") # a < -1 : Buyuyen Salinim
sistemCiz(a = -0.5, baslik="0 < a < -1 : Kuculen Salinim") # 0 < a < -1 : Kuculen Salinim
Av y arrtikca, avci x artiyor ve avci x arttikca av y azaliyor.
$$x = 0.5 * x + y$$$$y = -0.5 * x + y$$def av_avci(t = 20):
"""Avci (x) arttikca av (y) azalir ==>> negatif (ters yonde) geri besleme
Av (y) azaldikca avci (x) azalir ==>> pozitif (ayni yonde) geri besleme
"""
x = 1; y = 1;
y_degerleri = []
x_degerleri = []
for t in range(t):
yenix = 0.5 * x + y # yenix, eski x ve y kullanarak hesaplanmali
yeniy = -0.5 * x + y # yeniy, eski x ve y kullanarak hesaplanmali
x, y = yenix, yeniy # Eger yenix, yeniy kullanmazsaniz,
# x ve y hesabi karisir.
x_degerleri.append(x)
y_degerleri.append(y)
return x_degerleri, y_degerleri
t = 50
x_degerleri, y_degerleri = av_avci(t)
plt.figure(figsize=(10,6))
plt.plot(range(t),x_degerleri,'r-',markersize=10)
plt.plot(range(t),y_degerleri,'g--',markersize=10)
plt.grid(True)
plt.ylabel('Nufus');
plt.xlabel('t')
plt.legend(("Avci", "Av"), shadow=True, fancybox=True)
plt.figure(figsize=(10,6))
plt.plot(x_degerleri,y_degerleri,'b-')
plt.grid(True)
plt.xlabel('Avci'); plt.ylabel('Av');
Giren su: $$s_{gir}(t) = 10 + 0.3 * t$$
Cikan su: $$s_{cik}(t) = 0.5 * t$$
Havuzdaki su miktari, onceki su miktari arti birim zamanda giren ve cikan su miktari carpi zamandir.
$$H(t+\triangle t) = H(t) + (s_{gir} - s_{cik}) \triangle t$$dt = 0.1
t = np.arange(0, 21, dt)
s_gir = 2 + 0.3 * t
s_cik = 0.5 * t
net = (s_gir - s_cik) * dt
H = [1]
for t in range(len(t)-1):
H.append(H[t] + net[t])
plt.figure(figsize=(10,6))
plt.plot(s_gir,'g-',markersize=10)
plt.plot(s_cik,'r--',markersize=10)
plt.plot(H,'b-',markersize=10)
plt.grid(True)
plt.ylabel('Havuz');
plt.xlabel('t')
plt.legend(("Giren Su", "Cikan Su", "Havuzdaki Su Miktari"), shadow=True, fancybox=True)
len(H)
# Yapilacak
a, b = 1, 2
dt = 0.1
zaman = np.arange(0, 10, dt)
R = [1];
J = [-1];
for t in range(len(zaman)-1):
dR = a * J[t] * dt
dJ = -b * R[t] * dt
yeniR = R[t] + dR
yeniJ = J[t] + dJ
R.append(yeniR)
J.append(yeniJ)
print(len(R))
print(len(J))
print(len(zaman))
plt.figure(figsize=(10,6))
plt.plot(R,'g-',markersize=10)
plt.plot(J,'r--',markersize=10)
plt.grid(True)
plt.ylabel('Ask');
plt.xlabel('t')
plt.legend(("Romeonun Aski", "Julietin Aski"), shadow=True, fancybox=True)
Romeo ve Juliet, buyuyen ve giderek tehlikeli olan bir ask ve nefret sarmalina girmisler. Birinin aski sifir cizgisini gectiginde, digerinin davranisi degisiyor.
import random
x = random.randint(1,50)
tahmin = -1
while(tahmin != x):
tahmin = int(input("tahmininiz? x = "))
if x > tahmin : print("arttir")
if x < tahmin : print("azalt")
if x == tahmin: print("bildiniz")
# amac x^*
amac = 10
dt = 0.1
zaman = np.arange(0, 10, dt)
y = [29];
x = [7];
for t in range(len(zaman)-1):
dx = (amac - x[t]) * dt
yeniX = x[t] + dx
x.append(yeniX)
dy = (amac - y[t]) * dt
yeniY = y[t] + dy
y.append(yeniY)
print(len(zaman))
plt.figure(figsize=(10,6))
plt.plot(x,'g-',markersize=10)
plt.plot(y,'r--',markersize=10)
plt.grid(True)
plt.ylabel('Amaci olan sistemler');
plt.xlabel('t')
plt.legend(("x","y"), shadow=True, fancybox=True)
Toby Segaran'in Collective Intelligence adli kitabinin 2. bolumunden esinlenerek tavsiye sistemlerine bakalim.
Toby Segaran, Collective Intelligence Bolum 2 Toby Segaran, Collective Intelligence Bolum 2