Merhaba. Python’da örnekler yaparken aklıma bir şey takıldı. Bir sürü deneme yaptım gerek for i in olsun gerek .count() olsun gerek de .split() olsun ama bir türlü çözemedim. Mesela programda tanımlı olarak “Hypnogaja - Here Comes the Rain Again” karakter dizesi var. Kullanıcı da sadece comes the rain veya comes rain again yazarak bunu ekrana yazmak istiyor. Program ne yazılacak şeyi ne de bunların kaçıncı sırada olduğunu biliyor. Sadece yazılacak şey ile tanımlı olan değişkenin içindekileri kelime kelime alıp ilk olarak ilk kelimenin kaç kere geçtiğini, ikinci olarak ikinci kelimenin gibi bir karşılaştırmaya tabi tutuyor. Sonuç olarak da girilen değerle tanımlı değişken arasında 3 veya daha fazla kelime eşleşiyorsa bunu ekrana yazıyor. Yardımcı olabilecek biri var mı bu konuda?
Merhaba, kelimelerin sırası önemli değilse, bir karakter dizisinin en az 3 kelimesi kullanıcı tarafından girilmişse, karakter dizisi ekrana bastırılır.
x = "Hypnogaja - Here Comes the Rain Again"
say = 0
for i in input(">>> ").split():
if i in x.split():
say += 1
if say >= 3:
print(x)
Çok teşekkür ediyorum. Bir türlü yapamamıştım. Bunu os modülünü kullanarak listelediğimiz bir şarkı klasöründeki şarkılar için yapabilir miyiz? Mesela
for j in listdir("Music"):
print(j)
Çıktısı:
Pink Floyd - Comfortably Numb.mp3
Pink Floyd - Wish You Were Here.mp3
Hypnogaja - Here Comes the Rain Again.mp3
For döngüsüyle şarkı klasörünü listeyerek yaptım ama sadece son listelenen şarkıyı alıyor böyle.
import os
for j in os.listdir("Music"):
print(j)
say = 0
for i in input(">>> ").split():
if i in j.split():
say += 1
if say >= 3:
print(j)
Düzeltmem gereken kısım nedir acaba?
Döngüzü olarak yazınca da .split() kullanıldığı için hata veriyor.
Traceback (most recent call last):
File "C:\Users\semih\Desktop\b.py", line 8, in <module>
if i in j.split():
AttributeError: 'list' object has no attribute 'split'
Aşağıdaki kodlara göre, kullanıcının girdiği 3 tane kelime eğer dosyanın isminde geçiyorsa, o dosya ismi ekrana bastırılır. Kullanıcı 3 tane kelimeyi tek bir satırda girmek zorunda değil. İlk satıra “Pink Floyd” yazabilir, ikinci satıra “Wish” yazabilir, bu üç kelime şayet dosyalardan birinin isminin içinde geçiyorsa, o dosyanın ismi ekrana bastırılır. Kullanıcı ilk satıra “Wish You Were”, “Wish Were Here”, “Pink Wish You” vb. yazılar yazabilir, Bunların arasından üç kelime şayet bir dosya isminde geçiyorsa, o dosya ekrana bastırılır. Kullanıcı dosyanın isminde geçmeyen bir kelime yazabilir, 3 tane kelime dosyanın isminin içinde geçene kadar işlem tekrar edilir. Yani kullanıcı istediği satırda bu dosyaların isimlerinde olan üç tane kelimeyi girmek zorunda.
import os
dosyalar = [i.replace(".mp3", "") for i in os.listdir(os.getcwd()) if i.endswith(".mp3")]
ayikla = set()
while len(ayikla) != 3:
for i in input(">>> ").split():
for j in dosyalar:
if i in j.split():
ayikla.add(i)
if len(ayikla) >= 3:
break
for i in dosyalar:
if ayikla.issubset(set(i.split())):
print(i)
@fiRE, kod görünümü elde etmek için bir önceki paragraf ile kod arasında bir satır boşluk bırakmanız gerek. Sizin kodunuzu düzenledim, bu gönderiyi düzenle tuşuna basarak nasıl yaptığımı inceleyebilirsiniz.
Bir de Python girintileme üzerine kurulu bir dildir. Bir for döngüsü içine alacağınız bir kodu bu döngüye göre 4 satır girintileyerek yazmalısınız. Yani For döngüsüyle şarkı klasörünü listeyerek yaptım ama sadece son listelenen şarkıyı alıyor böyle. dediğiniz kod aslında şöyle olmalı:
import os
for j in os.listdir("Music"):
print(j)
say = 0
for i in input(">>> ").split():
if i in j.split():
say += 1
if say >= 3:
print(j)
Dünden beri uğraşıyorum ama bir türlü sonuca ulaşamadım. .lower() komutu listeler ile kullanılamaz gibi hatalar alıyorum. Listelenen şarkıların tümünü küçük harf yapma şansımız var mı? Çünkü kullanıcı küçük büyük harfe dikkat etmediği zaman bir sonuç elde edilmiyor.
import os
# Madem program küçük harfe duyarlı olacak, o halde şarkı isimlerindeki
# karakterleri küçültmek gerekiyor.
dosyalar = [i.lower().replace(".mp3", "") for i in os.listdir(os.getcwd()) if i.endswith(".mp3")]
ayikla = set()
while len(ayikla) != 3:
for i in input(">>> ").split():
for j in dosyalar:
# Kullanıcı büyük harf de girse, bu harfler küçültülüp,
# şarkı isimlerinde geçip geçmedikleri denetlenecek.
if i.lower() in j.split():
# Kullanıcının girdiği harfleri küçülterek kümeye eklemek lazım.
ayikla.add(i.lower())
if len(ayikla) >= 3:
break
for i in dosyalar:
if ayikla.issubset(set(i.split())):
print(i)
Kullanıcıya sunacağınız çıktıdaki kelimelerin ilk harflerini sonradan büyütebilirsiniz.
import os
dosyalar = [i.lower().replace(".mp3", "") for i in os.listdir(os.getcwd()) if i.endswith(".mp3")]
ayikla = set()
while len(ayikla) != 3:
for i in input(">>> ").split():
for j in dosyalar:
if i.lower() in j.split():
ayikla.add(i.lower())
if len(ayikla) >= 3:
break
ayiklanmis = [i for i in dosyalar if ayikla.issubset(set(i.split()))]
satir = []
for i in ayiklanmis:
sutun = []
for j in i.split():
sutun.append(j.capitalize())
satir.append(sutun)
for i in satir:
print(*i)