Her satırında tek kelime bulunan bir txt dosyasından, birbirinden farklı rastgele 12 kelime seçecek bir kod oluşturmak istiyorum. Programlama bilmiyorum googleden araştırarak yapmaya çalıştım fakat başaramadım.
Yapmaya çalıştığın ama yapamadığın kodu verir misin bir bakalım.
import random
print(random.choice(open(‘text.txt’).read().split()).strip())
Bu şekilde tek bir kelime alabiliyorum. Anlattığım gibi bunu birbirinden farklı 12 kelime yazdıracak hale getirmem gerek.
Gayet güzel ilerlemişsin. Bir de yapamadım diyorsun.
Evet
Python program to read a random line from a file. Code Example (codegrepper.com)
Buradaki gibi bir tanesini alabilmişsin.
Bunu on iki kere daha yapman gerekecek.
Bu durumda bir tekrarlanan loop/döngü kullansan.
Python For Loops (w3schools.com)
for x in range(12):
print(x)
Gibi bir döngü ile 12 kez çalıştırabilirsin.
Kodun da şöyle bir şey olur.
import random
def randnum(fname):
lines=open(fname).read().splitlines()
return random.choice(lines)
for x in range(12):
print(randnum('file1.txt'))
Bu sana 12 rastgele kelimeyi çeker.
Peki bir tek konu kaldı.
Bu 12 tane kelimenin farklı olması için ne yapabilirsin.
O konuda da bir fikrin var mı?
Biraz düşün.
Çözümü beraber bulalım.
Bulabileceğine inanıyorum.
Peki şöyle olur mu?
Python Get Multiple Random Lines From File - Stack Overflow
import random
keyword_list = []
anchors = open("file1.txt", "r")
#Placed In List:
for line in anchors:
keyword_list.append(line.replace("\n", "|"))
anchors.close()
rand_options = keyword_list # duplicate list, better than editting the input list
rand_vals = []
length = 12
for _ in range(length):
rand_val = random.choice(rand_options)
rand_vals.append(rand_val)
rand_options.remove(rand_val) # remove from list so you don't get duplicates (unless you don't mind those)
what_you_want = "".join(rand_vals).rstrip("|")
print(what_you_want)
takipteyim. şu fonksiyonları sevdireceksin gibi. encoding=“utf-8” de ekledim fonksiyona türkçe karakterleri düzeltti.
Bizim zamanımızda hiç Türkçe karakter yoktu, biz ç ve ş nedir görmeden büyüdük
Onun için hayatta utf-8 kullanmadım.
Geçen gün bir arkadaşımın öğrencisi, bir veri tabanına erişen bir kod yazmış.
tüm tablo adları Türkçe, her şey bir birine girmiş.
Gördüğüm her programcıya, Türkçe karakter kullanma diye tembihliyorum.
En azından kodlanan kısımda ve değişkenlerde kullanmadığım gibi, data ları da alışkanlık hep ingilizce yazmaya çalışıyorum.
ç,ş,ö, yok huzur var.
random.sample
'ı arıyorsunuz galiba; choice
'i sample
diye değiştirip pasladığınız listenin (open("text.txt").read().split()
) yanına kaç eleman istediğinizi yazarsınız. Geriye liste döndürüyor, dolayısıyla strip
'in de gitmesi gerekir.
choice
: 1 eleman seçiyor,
choices
: 1’den fazla eleman seçebiliyor, ama tekrarlı (yani bir gelen bir daha gelebilir),
sample
: choices
'ın tekrarsız hali.
Sıra bende Türkçe den Türkçeye çeviri zamanı
import random
print(random.sample(open("file1.txt", encoding="UTF-8").read().split(), 12))
Bu mudur?
Çok güzel bence.
Ilginc, cunku CP 437’de ç ve ü var. Ama ayarlar her zaman olmazdi (bazen kapladiklari onlarca kilobyte’lik hafizaya ihtiyacimiz olurdu) ve diger karakterlerin duzgun gozukmesini bekleyemezdik. 437’deki bazi karakterleri sadece 857’deki Turkce karakterlerin pozisyonlarinda oldugu icin biliyorum! (850 de baya tanidik ama neden, bilmiyorum)
Hayatta kullanmaman gereken sey UTF-16. UTF-8’e gore tek avantaji dogu dilleri icin ~%50 daha az hafiza gerektirmekle beraber BE/LE varyantlari ve \0 karakterleri gibi buyuk dezavantajlari var. UTF-8 ilac gibi geldi ve bir suru problemin onune gecti.
Kesinlikle. Dahasi Turkce klavye kullanmamak olabilir (alt-gr kombinasyonlari cok cirkin)
Benim aklımda zorda kalırsam CP857 vardı, ibm makinemde sx55 miydi neydi… Türkçe kullanmak istesem ne yazar, zaten keyboard da yerlerini aramak zorunda kalacaktım.
Ben pozisyonlarını bile bulamıyordum.
Burada biraz ironidir. Tabi ki kullanmak isteyen kullanır.
Ama o zaman ASCII tablosu deyince bu çıkıyordu.
ASCII Table: Printable Reference & Guide - αlphαrithms (alpharithms.com)
Extended ascii tablosunu gördüğüm vay demiştim. artık tabolo da çizebiliyordum karakterlerle.
Benim için karakter 8 bittir max. İşletim sistemleri gelişti, kod sayfalar gelişti bellek sıkıntısı da yok tabi ki. Ama her zaman ben, eski kısıtlar içinde kalmam durumunda garip kod problemleri ile zaman kaybetmiyorum.
Yani o dönemler istesem de Türkçe bir klavyem yoktu.
Ama Türkçe bir klavyeye ihtiyacım olabileceği de aklıma gelmiyordu.
Şimdi varsayılan ben de ingilizce klavye tavsiye ediyorum.
Ama özeleştiri yanlış yoldayım. Kullanıcılar her şeyin Türkçe yazmasını istiyor. Eskiden bilen kullanırdı, şimdi herkes kullansın diye programlar yazıldığı için, doğal olarak dillerine uygun görmek istiyorlar.
Sonuçta, kodlamayı öğrenecek birinin bir de oturup Türkçe karakterden kaynaklanan hatalarla boğuşmasını istemediğimden, ilk olarak ingilizce de kalmasını tavsiye ediyorum.
Bilgisayar kullanicisinin profili de degisti.
Gerci ilginc bir sekilde geriye donus goruyorum. 2000’lere kadar her evde bilgisayar yoktu. 2010’lar gibi filan sanirim, her evde, herkeste bilgisayar vardi. Simdi tekrar bilgisayar kullanmayan insanlar var.
Bu konuda çok haklısınız.
Artık simge tıklayan droidler var. Tıklayamadıklarında apışıp kalıyorlar çok üzülüyorum.
Yapmak istediğim şey tam olarak buydu. Kelimeleri alt alta değil de yan yana nasıl yazdırabilirim diye danışacaktım fakat sormadan cevaplamışsınız bile Çok büyülü bir şey gibi geliyor bana bu programlama işi. Sınırları yok gerçekten zihninde canlandırdığın algoritmanın dijitalde işleyip çalışmasını görmek aşırı tatmin edici bir durum benim adıma. Fakat öğrenmek de epey meşakkatli görünüyor. Hiç tecrübesi olmayan biri için zor bir iş midir bu yapmak istediğim bilmiyorum ama benim başladığım nokta ile sizin son halini paylaştığınız nokta arasında çok fazla fark var gibi. Yardım almadan başaramazdım kesinlikle fakat uğraşmak, yardımlaşmak bile keyifliydi teşekkür ederim yardımlarınız için.
Şimdi kısa bir tavsiye.
Son kod python’a özgü.
Ben birden çok dille çalıştığım ve kodların birinden diğerine taşınması kolay olsun diye, olabildiğince temel özellikleri kullanmaya çalışırım.
Yani her dilin bir random komutu vardır ama, her dilin random.sample komutu yoktur.
Bir den çok dile kodu aktarman gerektiğinde dile özel nitelikleri kullanmaktan kaçınırım.
Tabi bu tercih meselesi.
Mesela bir dosya okuma algoritmasında, dosya okurken, genelde c ve pascal/object pascal gibi diller while eof kullanır. Dosya sonuna kadar devam eden bir döngü kullanır.
Ama pythoncılar, bunu with ile yapmayı tercih ediyorlar.
Ama kodu taşırken bu ortak özellikler üzerinden yürürsen, hem birden çok dile alışırsın. Hemde başka dillerde olmayan özelliklere alışıp bunların olmadığı yerlerde zorlanmazsın…
Yani son kod parçası, python a özel bir nitelik her dilde bulamazsın.
Bu nedenle uzun uzun, olan kodları yazıyorum. Hem okurken anlama ihtimalin artar hem de üzerinde oynamak istediğinde ve başka dillere taşırken zorlanmasın.
Ama bu bir tercih. Tek dil ve kolayına kaçmak istersen bu kötü bir şey değil çabuk işini halletmek için bir yöntemdir.
Sadece ben tercih etmiyorum.