Str içinden veri silmek

rakam = "
1 0 4 7 6 8
0 5 4 4 5 5
2 1 4 4 4 6
4 1 3 7 4 4
1 1 1 7 4 5
"
Tahta oyunu yapmaya calisiyorum simdi soyle bir sey yapmak istiyorum ama bir turlu yapamadim, ben kullanicidan bir rakam gimesini isteyecem kullanici girdiyi rakami bu str icinden aratacam aranan rakam str icerinde aranacak varsa saginda solunda asagi yukarinda olanlar silinecek .Diyelim kullanici 1 girecek yukarda rakamlarin soyle olmasini istiyorum

1 0 4 7 6 8
0 5 4 4 5 5
2 4 4 4 6
4 3 7 4 4
7 4 5
tek kalan bire dokunulmayacak bunu mantigini ben anlamadim yardimci olurmsunuz

sağ ve sol kolay da yukarı ve aşağısı nasıl olur bilemedim.

ozele bakarmisiniz lutfen

kod nasıl yapıştırılır bilmiyorum o yuzden buraya attım

https://paste.ubuntu.com/p/cRnRZ3t3mB/

str yi listeye çevirip aynı mantıkla yaparsın. Daha kolay bir yolu olabilir fakat bende yeniyim bu işlerde :slight_smile:

Bu işlem için karakter dizisi yerine iç içe liste yapısını kullanmanız daha doğru olacaktır. İç içe liste örneğinde her satır için bir liste açarak ve bu satır listelerinide ayrı bir liste içine alarak kolonlara da erişebilirsiniz. Örneğin 3x3 bir tahta örneği için;

[[x, o, x],
[x, o, x],
[o, x. o]]

Gibi bir liste yapısı kullanılabilir. Örneğin 2.satır 3.kolondaki harfe liste[2][3] şeklinde erişebilirsiniz.

Biraz uğraştırdı ama sonunda hallettim.



sema = [["1","0","4","7","6","8"],
         ["0","5","4","4","5","5"],
         ["2","1","4","4","4","6"],
         ["4","1","3","7","4","4"],
         ["1","1","1","7","4","5"]]

def icerikEsitKontrol(rakam,arananDeger):
    
    silinecekTablo ={}
    disDonguArti =0
    for icList in rakam:
        icDonguArti = 0
        silinecekTablo[disDonguArti] =[]
        for i in icList:
            if i == arananDeger:
                #Aynı Sırada bir Sonrakinde ile eşit mi (?) Kontrolü
                if len(rakam[disDonguArti])-1 > icDonguArti:
                    if (rakam[disDonguArti][icDonguArti+1] == arananDeger):
                        if silinecekTablo[disDonguArti].count(icDonguArti) ==0:
                            silinecekTablo[disDonguArti].append(icDonguArti)
             
                # Aynı Sırada bir Öncedinde ki ile eşit mi (?) KontrolÜ
                if (icDonguArti>0):
                    if(rakam[disDonguArti][icDonguArti-1]==arananDeger):
                        if silinecekTablo[disDonguArti].count(icDonguArti) ==0:
                            silinecekTablo[disDonguArti].append(icDonguArti)
                       
                # Bir altindaki ile eşit mi (?) Kontrolü
                if(len(rakam)-1>disDonguArti):
                    if not (len(rakam[disDonguArti+1])-1 < icDonguArti):
                        if rakam[disDonguArti+1][icDonguArti]==arananDeger:
                            if silinecekTablo[disDonguArti].count(icDonguArti) ==0:
                                silinecekTablo[disDonguArti].append(icDonguArti)
                # Bir yukarısındaki ile eşit mi (?) Kontrolü
                if(len(rakam)-1==disDonguArti):
                    if not (len(rakam[disDonguArti-1])-1 < icDonguArti):
                        if rakam[disDonguArti-1][icDonguArti]==arananDeger:
                            if silinecekTablo[disDonguArti].count(icDonguArti) ==0:
                                silinecekTablo[disDonguArti].append(icDonguArti)
                
                          
            icDonguArti +=1
        disDonguArti += 1
    return silinecekTablo
                    

def rakamlar(gelen):
    print("="*11)
    for i in gelen:
        for v in i:
            print(v , end=" ")
        print()
    print("="*11)


while True:
    rakamlar(sema)
    print("Çıkış için : (Q) -(q)")
    girdi = input("Rakam Giriniz :")
    if girdi == "Q" or girdi == "q":
        break

    silinecekVeriler = icerikEsitKontrol(sema, girdi)
    for icdizi in silinecekVeriler:
        for i in reversed(silinecekVeriler[icdizi]):
            del sema[icdizi][i] 


Çıktı :

===========
1 0 4 7 6 8 
0 5 4 4 5 5 
2 1 4 4 4 6 
4 1 3 7 4 4 
1 1 1 7 4 5 
===========
Çıkış için : (Q) -(q)
Rakam Giriniz :4
===========
1 0 7 6 8 
0 5 5 5 
2 1 6 
1 3 7 
1 1 1 7 4 5 
===========
Çıkış için : (Q) -(q)
Rakam Giriniz :1
===========
1 0 7 6 8 
0 5 5 5 
2 1 6 
3 7 
7 4 5 
===========
Çıkış için : (Q) -(q)
Rakam Giriniz :5
===========
1 0 7 6 8 
0 
2 1 6 
3 7 
7 4 5 
===========
Çıkış için : (Q) -(q)
Rakam Giriniz :

1 Beğeni