Fonksiyon içinde fonksiyon çağırma

import sqlite3
from tkinter import *

vt = sqlite3.connect('deneme7.db')
im = vt.cursor()
#vt.close()
boştablo=None
def bos_tablo():
        global boştablo
        s = [f't{i}' for i in range(1,12)]
        for boştablo in s:
    
            im.execute("select no from " + boştablo + "")
            a=im.fetchone()
        
            if a==None:
                return
bos_tablo()
print(boştablo)# test için

def giriskelime():
    
    a=input("Bişeyler Yaz: ")
    b=a.split() 
    k=0
    
    if (len(b)-1)>=k:
        im.execute("select algi from ana where algi like '%{}%' group by algi".format(b[k]))
        if im.fetchone()!=None or '':
            print(b[k]) #test için
            
            im.execute("""insert  into " + boştablo + " select no, algi, c 
                        from ana where algi like '%{}%' group by algi""".format(b[k]))
        elif im.fetchone()==None or '':
                        
            g=len(b[k])
            kelime=b[k]
            print(kelime) #test için
            for c in range(1,g-1):
                ke=kelime[:g-c]
                im.execute("select algi from ana where algi like '%{}%' group by algi".format(ke))
                                         
                if im.fetchone()!=None or '':
                    print(ke) #test için
                    im.execute("""insert into '+ boştablo +' select no, algi, c from ana
                               where algi like '%{}%'""".format(ke))
                    break                             
               
     
    if (len(b)-1)>=k+1:    
        im.execute("select algi from ana where algi like '%{}%' group by algi".format(b[k+1]))
        if im.fetchone()!=None or '':
            print(b[k+1])
            im.execute("""insert  into '+ boştablo +' select no, algi, c 
                        from ana where algi like '%{}%' group by algi""".format(b[k+1]))
        elif im.fetchone()==None or '':
            g=len(b[k+1])
            kelime=b[k+1]
            print(kelime)
            for c in range(1,g-1):
                ke=kelime[:g-c]
                im.execute("select algi from ana where algi like '%{}%' group by algi".format(ke))
                                         
                if im.fetchone()!=None or '':
                    print(ke)
                    im.execute("""insert into '+ boştablo +' select no, algi, c from ana
                               where algi like '%{}%'""".format(ke))
                    break 
#giriskelime() fonksiyonu, " +  boştablo + " yerine t1, t2 tablo isimleri girdiğimde inputtan girilen 
#ifadeyi kelimelere bölüp, eşleşen kelime yoksa ilk eşleşmeye kadar kelimeyi sağdan kırpıp
#ilgili tabloya giriyor.               

“boştablo” adlı global değişkeni “giriskelime()” fonksiyonu içinde çağıramıyorum. “boştablo” diye bir tablo yok diyor. Halbuki " + boştablo + " değişkeni, fonksiyon dışında çalışıyor. Bos_tablo() fonlsiyonunu giriskelime() fonksiyonunun içinde en başa yerleştirdim, sonuç değişmedi.
1- Fonksiyon çağırma konusunda,
2- Belki fonksiyon oluşturma konusunda eksiklerim var ve zorlanıyorum.
Arkadaşlar ben programlamayı üç aydır öğrenmeye çalışıyorum, 64 yaşındayım ve evde torun var. İnternette araştırırken bazan beynim duruyor, siz gençler gibi çalışamıyor kafam. Basit hatalar yapıyorsam gülün ama hoşgörün lütfen. Bazı yerlerde çok basit anlatıma ihtiyacım olabiliyor, temel olmayınca. Teşekkür ederim yardımlarınız için.

Bu çok sinir bir problem. Python ile uğraştığınız sürece de karşınıza böyle ne idüğü belirsiz problemlerle karşılaşacaksınız.(Tecrübeyle sabit)

Bu problemde ise global deyimini kullanmayı deneyin. Olmazsa şu şekilde bir yol izleyin:

başkent="Ankara"
def başkent_neresi(başkent=başkent):
    print(başkent)

Yani isimli bir parametre olarak fonksiyona verin. Bu Fırat Özgül tarafından önerilen yöntem.

1 Beğeni

global değişkenler kullanılması tavsiye edilmiyor zaten global değişkeni yanlış kullanmışssınız ve görüyorumki fonksiyonel yazma bölümünde bazı sıkıntılar yaşıyorsunuz bu büyük ihtimalle henüz tam olarak kavrayamamış olmanızdan kaynaklanıyor, fonksiyon yazmayı tıpkı matematik de var olan f(x) fonksiyonları gibi duşunun zaten farklarıda yoktur, gördüğünüz gibi f fonksiyonuna x parametresi verdim python dilinde de fonksiyon tanımlarken onlara istediğiniz kadar parametre verebilirsiniz örneğin.

def my_function(func_parameter=10):
    return func_parameter

print(my_function())
print(my_function(12))
print(my_function(func_parameter=18))

return de nedir derseniz eğer return’u print gibi düşünün ama yaptığı iş fonksiyon sonucu oluşan veriyi almamızı sağlar mesela ben

a = my_function(12)
print(a)

yaptığımda a’nın değeri 12 olur bunu sağlayan şey return dur oraya return yazmazsam hiç bir şey döndürmediğ için fonksiyonum a değeri None olacaktır

çıktı;

>>> 10
>>> 12
>>> 18

ek olarak fonksiyon yazıyorsanız içine input gibi kullanıcı girdileri alınmaz onun yerine o değişken parametre olarak fonksiyona verilir siz veriyi dışarıdan alır ve fonksiyon parametresine yazarsanız daha sağlıklı olur.

ve kod yazarken türkçe dilini unutursanız herkes için daha iyi olur, açıklamalar yrorumlar değişken isimleri fonksiyon isimler hepsi ingilizce olursa daha global ve anlaşılır bir kodlama olur.

Umarım anlaşılmıştır, kolay gelsin

2 Beğeni

Teşekkürler, dikkate alacağım.

global kullanmanız gerek ancak bence bunu hiç öğrenmeyin. Doğrudan sınıf kullanımına geçin ve rahat edin.

1 Beğeni