Bir karakter setinden özel bir kısmı almak

’value of pi is {0::}’ .format(2563.14568324598)

Burada pi sayısını istediğim uzunlukta ki ondalık kısmıyla beraber (burada 3.14) seçebilmek istiyorum. Format kısmına girdiğim sayıdan pi sayısını çekmek yani.

‘value of pi is {0:.3f}’.format(float(str(23.145678)[1:])) → bu şekilde de oluyor ama ben { } arasında kodlama yaparak çözmek istiyorum. Ve pi sayısının değerini gördüğünde bulsun ve yazsın istiyorum.

Nasıl yapabilirim?
Yardımcı olursanız çok sevinirim.

1 Beğeni
sayi = 2563.14568324598
a = str(sayi)
print(f"value of pi is {float(a[3:7])}")

3:7 3.indexten başlar 7 indexte biter 7. index dahil değil

teşekkür ederim cevap yazdığınız için. sayının nerede olduğunu bilmediğimizi farzediyoruz. herhangi bir yerde olabilir. 314 bulmasını istiyorum. ve .format kullanıcam. { } arasına ne yazmam gerek onu bulamıyorum. yada alternatifini!

{} arasında kodlama yapmak ne demek ve {0:.3f} ifadesi bu kritere neden uymuyor?

1 Beğeni

’value of pi is {""“SONUCU BULMAK İÇİN BURAYA BİŞEY YAZMALIYIM.”"" }’ .format(2563.14568324598)

" {0:.3f} ifadesi bu kritere neden uymuyor? " Kritere uymuyor demedim. istenilen çözüm bu değil demek istedim.

1 Beğeni

O zaman 314’ü metin içerisinde arayabilir, bulursanız da ekrana istediğinizi yazabilirsiniz. Aradığınız metin zaten belli. Üzerinde arama yapılan metni formatlamaya falan gerek yok.

bu bir veri çalışması. zilyon tane veriden hangisinin içinde 314 tekrarı var onu bulmaya çalışıyorum. yani metin içerisine tek tek bakamam. anlatabildim mi?

Kod bir metin içerisine bakmadan onun içinde ne olup olmadığını anlayamaz. Niye her metnin içine tek tek bakamıyorsunuz ki?

En az on kere okudum. Sonra iki kere cevap yazmayı düşündüm. Üçüncüde yazacak oldum onu da sildim.

Neden mi?

{} arasına kodlamaktan kastınızın ne olduğunu bir türlü çözemedim.

Eminim siz ne istediğinizi biliyorsunuzdur da ben anlayamıyorum.

{} arasına biçimlendirme direktifleri girebilirsiniz.

Bunlar da sınırlı.

Formatlama type ları bu kadarcık:

Python String format() Method (w3schools.com)

Yani Türkçemiz yetse kesin çözeriz de bir türlü Türkçe anlayamadık.

Yoksa bir metin içinde pattern aramak için örnek kod verecektim.

Dict içinde en çok tekara eden kelimeyi bulmak! - Kategorize - YazBel forumu

Konusundaki,

import re
import string


frequency = {}
document_text = open('metin.txt', 'r')
text_string = document_text.read().lower()
match_pattern = re.findall(r'\b[a-z]{3,15}\b', text_string)
 
for word in match_pattern:
    count = frequency.get(word,0)
    frequency[word] = count + 1
     
frequency_list = frequency.keys()
 
for words in frequency_list:
    print (words, frequency[words])

re.findall

Fonksiyonu ile 3.14 ü pattern olarak tanımlayıp kaç tane geçiyorsa data içinde kolayca bulabilirsiniz.

Bize asıl sorunu söyleyin.

{} içinde çözmek sorunda mıyız yoksa sizin istediğiniz bir data da 3,14 leri istediğiniz formatta bulmak mı istiyorsunuz.

Netleştirin çözen çok katılımcı olacaktır.

Edit:

Python RegEx: re.match(), re.search(), re.findall() with Example (guru99.com)

Buradan re modülü ile yapabileceklerinize örnekler.

Edit:

Hadi buna da örnek vereyim;

import re

s = 'abccba'
ss = 'facebookgooglemsmsgooglefacebook'
p = 'xyzzyx'

def match(s, p):
    nr = {}
    regex = []
    for c in p:
        if c not in nr:
            regex.append('(.+)')
            nr[c] = len(nr) + 1
        else:
            regex.append('\\%d' % nr[c])
    return bool(re.match(''.join(regex) + '$', s))

print(match(s, p))
print(match(ss, p))

Kaynak: Python: Find pattern in a string - Stack Overflow

2 Beğeni

merhaba,
öncelikle mesaj yazan ve emek veren herkese çok teşekkür ederim. dün çok yorgun olduğumdan erken kapatmıştım pc yi. devam edemedim. kusura bakmayın lütfen.

Bu soruyu bir kursun data analyst iş başvurusunda sorulabilecek sorular listesinden sormuşlardı.

'value of pi is {}' .format("sample-input")

→ find the pi pattern in the sample-input with 1-line of python code.

şeklinde bir soruydu.

‘value of pi is {0:.3f}’.format(float(str(23.145678)[1:])) → bu şekilde çözdüm ama kabul edilmedi. Daha genel ve tek satırlık bir çözüm istediklerini söylediler. Yani sample-input int,float yada string herşey olabilir ve içinde ki pi sayısını bulmamız gerektiği.
Ben de format kısmını zaten denediğim için {0:.3f} yazdığım kısımda düzenleme yaparak sonuca ulaşabileceğimi düşündüm. neredeyse 1 aydan fazladır bu soruyla uğraşıyorum. ve yapamadım. Soruyu soranlara da cevabını soramıyorum çünkü bu tuhaf olacak. NLP dahil text mining de dahil okumadığım araştırmadığım kaynak kalmadı. en detaylı yorum ve cevaplar da bu sitede olduğundan-ki uzun zamandır takip ederim, ilk defa dün kayıt olup bu soruyu sordum. Daha fazla buna zaman harcamak istemiyorum ama çözememiş olmak da içimi kemiriyor. Çok basit görünüyor ama tek satırda yapamadım. Bu sebeple yardım almak istedim.
Sorunun data science alakalı iş başvurularında python kullanımıyla ilgili sorulabilir dendiği için tablo halinde ki bir veri setinden -muhtemelen, veri çekilmek istendiğinde uygulanacağını düşündüm. Daha ayrıntılı bilgim yok. Python bildiğimi sanıyordum ama bu soruyu yapamayınca kendimden şüphe ettim.
@semtex : zaman ayırıp uğraştığınız için ayrıca çok teşekkür ederim. referans gösterdiğiniz tüm kaynaklara zaten bakmıştım. sadece regex aklıma gelmemişti. onu da bulup yazmışsınız çok sağolun, inceleyeceğim. Stack Overflow dan da bu konuyla alakalı olabilecek neredeyse her yoruma bakmıştım.
Sanırım merakımı yenemezsem firmaya mail atıp cevabı isteyeceğim. Eğer gönderirlerse yada ben yapabilir isem buradan paylaşacağım.
Tekrardan emeklerinize sağlık. Zaman ayırdığınız için minnettarım.
İyi günler dilerim.

2 Beğeni

Yukarıdaki kod da sorunun bir parçası mı? Kodun sadece {} kısmının değiştirilmesi mi bekleniyor? Yoksa o kodu siz kendiniz mi yazdınız?

merhaba
ben yazdım sanırım. başka sorular da sormuşlardı hepsini not almaya çalışıyordum. kayıt aldım mı hiç hatırlamıyorum. ama tek satır denince böyle yazmışımdır muhtemelen.

@semtex’in de dediği gibi böyle bir formatlama direktifi yok.

Sorunun bu ikisi ile pek alakası yok zira satır sınırlaması var. Sorunun Python syntax’ı ile alakalı olduğunu söylemek yanlış olmaz.

Kemirmesin. Ben soruyu hem bir satırda hem de sizin verdiğiniz 'value of pi is {}' .format(f(sample)) formatına uygun olarak tek bir expression halinde çözebiliyorum*. Satır sınırlaması kaldırılmadığı sürece uğraşmaya değecek bir soru değil.

Sizin iş bulma aciliyetiniz ve Türkiye’deki data analist veya yazılımcı mülakatlarının durumu hakkında hiçbir bilgim olmadığı için ukalalık yapmak istemem ama bana bir iş başvurusunda tam olarak bu tür bir soru sorsalar ben o iş yerini kolay kolay tercih etmezdim. Sunulan cevap şaşırtırsa ve okunabilir, işe yarar bir kod ise belki. O yüzden kursunuzun vereceği cevabı da merak ettim. Bence siz de sorunun cevabını soranlardan istemekten çekinmeyin.

Tek satırlık bir koda ihtiyaç duyulacak veya bir satır sınırı olmadan problemi fonksiyon ile çözüp o fonksiyonu kullanmanın uygun olmayacağı bir durum düşünemiyorum.


from math import pi
sample = 23.1415678
print('value of pi is {}'.format((lambda s, pi: next(pi[:i] for i in range(len(pi), -1, -1) if pi[:i] in s))(str(sample), str(pi))))
3 Beğeni

evet ben de ilk başta syntax ile ilgili diye düşündüm ama istenilen çözümü bulamayınca başka kaynaklara baktım.

Teşekkürler biraz içim rahatladı :slight_smile:

iş bulma aciliyetim yok. ben data science çalışıyorum ve sertifika sınavlarına hazırlanıyorum. hackerrank ve leetcode coderbyte vs. tamamlayarak eksiklerimi gideriyorum. internette interview questions yada firmaların yaptığı sınavların içerikleri var onlara bakıyorum. hiç Tr de iş başvuru sorusu görmedim ve okumadım. Varsa da ben de bilmiyorum. bunlar da yanlış hatırlamıyorsam Hindistandan bir grubun mülakat sorularıydı.

tamamen haklısın sonuçta iş başa düşünce her yoldan çözüm üretiliyor. çok da kasmamak lazım :wave: :wave: :wave:

çözüm için teşekkürler benimkinden çok daha güzel olmuş :ok_hand:

3 Beğeni

Ben de ne anladım, keşke baştan şunu verseydiniz,

Hile bile yapardım.

str1 = "a421353,14543"
str2 = "a545646x3,04ddm"

print ("value of pi is {} in str1".format( "3,14"if("3,14" in str1) else "Not Found"))

print ("value of pi is {} in str2".format( "3,14"if("3,14" in str2) else "Not Found"))

Basitce in ile bir pattern arayın, format() kullanın tek satır olsun.

Üç sınırlama.

Basit bir karşılaştırma sorusu.

Dün nasıl göremedim hayret.

Bunların hepsini bir mülakat hikayesi anlatmak için yazdım aslında, vaktim olursa o hikayeyi de anlatayım. Boşu boşuna canınızı sıkmayın böyle şeyler için.

EDIT:

@Ekrem hocam ın çözümünü de şimdi gördüm bende alternatifleri de çağrıştırdı.

print ("value of pi is {} in str1 Simple Ternary".format( "3,14"if("3,14" in str1) else "Not Found"))

print ("value of pi is {} in str2 Simple Ternary".format( "3,14"if("3,14" in str2) else "Not Found"))


print ("value of pi is {} in str1 Indexed Ternary".format( "3,14"if(str1.index("3,14")>0) else "Not Found"))

print ("value of pi is {} in str2 Indexed Ternary".format( "3,14"if(str2.index("3,14")>0) else "Not Found"))

Son iki print, pozisyon bilgisinden faydalanıyor. Bulamazsa traceback hatası veriyor ama bu da bir try except le kontrol edilebilir ama bu durumda iki satırı geçiyor. exec le bir hile da yapılabilir ama yakışıksız olur. Sonuçta ilk iki satır çözüm, ikinci satı, desenin konumu gerektiğinde üzerinde çalışılabilecek deneysel bir kod parçası olarak kalsın.

string in string için bir kaç aklıma gelen çözüm.

EDIT 3

Başta hile de yapardık demiştim.

Hile yi de ekleyim.

str1 = "a421353,14543"
str2 = "a545646x3,04ddm"

print ("value of pi is {} in str1 Simple Ternary".format( "3,14"if("3,14" in str1) else "Not Found"))
print ("value of pi is {} in str2 Simple Ternary".format( "3,14"if("3,14" in str2) else "Not Found"))

print("One line cheat :) ")
exec("x = '3,14' in str1\nif (True==x):\n    print('value of pi is {}' .format('3,14'))\nelse:\n    print('Not Found')")
exec("y = '3,14' in str2\nif (True==y):\n    print('value of pi is {}' .format('3,14'))\nelse:\n    print('Not Found')")
2 Beğeni

süpersiniz. çok teşekkür ederim.
en baştan soruyu verildiği şekilde yazmak aklıma gelmedi zaten çok hatırlamıyordum. bir aydır bu şekilde tasarladığım için aynı şekilde sordum. karşılaştırma sorusu olabileceğini de hiç düşünmemiştim. ufkumu açtınız.
emeğinize sağlık. zaman ayırdığınız için minnettarım. iyi günler dilerim.

1 Beğeni