Python Bilginizi Sınayın! - Soru

b0mb

Katılımcı Üye
14 Mar 2017
471
1
İzmir
Merhabalar, bir abim gruba bir soru attı. Soru çok hoşuma gitti, ben de sizlerle paylaşmak istedim.

Ben bu soruyu çözdüm, isteyene sonradan detaylı olarak anlatırım.(Temel Py bilgisi varsa.)
Çözümlerinizi özelden atınız ki başka arkadaşlarımız da denesinler :) Ben sonradan buraya çözenleri yazarım..

Soru:
ojj21Q.jpg
 

ihan3t

Kadim Üye
7 Şub 2012
5,018
27
Ever cevap bu, wiki'de yaziyor. Kaynak kod?

Can sıkıntısından yazdım isteyen buyursun :

Kod:
# -*- coding:utf-8 -*-
"""run.py: Calculate special numbers for range in 100000."""

__author__ = "ihan3t"

def fact(number):
    if number == 1 or number == 0:
        return 1
    return number * fact(number-1)


def split(number):
    number = str(number)
    length = len(number)
    numbers = [number[x] for x in range(length)]
    return numbers

def calculate(number):
    numbers = split(number)
    values = [fact(int(x)) for x in numbers]

    if sum(values) == number:
        return number

print filter(lambda number: number is not None, set([calculate(x) for x in range(100000)]))
 

b0mb

Katılımcı Üye
14 Mar 2017
471
1
İzmir
Can sıkıntısından yazdım isteyen buyursun :

Kod:
# -*- coding:utf-8 -*-
"""run.py: Calculate special numbers for range in 100000."""

__author__ = "ihan3t"

def fact(number):
    if number == 1 or number == 0:
        return 1
    return number * fact(number-1)


def split(number):
    number = str(number)
    length = len(number)
    numbers = [number[x] for x in range(length)]
    return numbers

def calculate(number):
    numbers = split(number)
    values = [fact(int(x)) for x in numbers]

    if sum(values) == number:
        return number

print filter(lambda number: number is not None, set([calculate(x) for x in range(100000)]))

Benimki daha az karışık :D

https://gist.github.com/blackvkng/41b7e21382f54ac02004ccc9409a7457
 

ihan3t

Kadim Üye
7 Şub 2012
5,018
27

Attığınız koda refactoring nasıl yapacaksınız, reusability nerede ? Unit test yazmanız gerekse nasıl yazacaksınız ?
Open-closed, single responsibility prensipleri ?
Bunları göz önüne alırsak sizin kodunuz daha karmaşık.

Tabi bunlar fazla detay şeyler bu şekilde bir işlem için gerekmeyebilir sonuçta büyük bir proje yapılmıyor. Fakat alışkanlık meselesi.

Yarın öbür gün işe girersiniz, gistte attığınız gibi bir kod yazarsanız ertesi gün gidecek bir işiniz olmaz..
 

b0mb

Katılımcı Üye
14 Mar 2017
471
1
İzmir
Attığınız koda refactoring nasıl yapacaksınız, reusability nerede ? Unit test yazmanız gerekse nasıl yazacaksınız ?
Open-closed, single responsibility prensipleri ?
Bunları göz önüne alırsak sizin kodunuz daha karmaşık.

Tabi bunlar fazla detay şeyler bu şekilde bir işlem için gerekmeyebilir sonuçta büyük bir proje yapılmıyor. Fakat alışkanlık meselesi.

Yarın öbür gün işe girersiniz, gistte attığınız gibi bir kod yazarsanız ertesi gün gidecek bir işiniz olmaz..

Tek bir amaca yonelik bir kod yazmistim, bir yerde kullanmak icin degil. Sadece istenileni yaptirmaya calistim.

Is icin biraz kucugum sanirim, ogrenmeye calisiyoruz.
Bundan sonra dediklerinize daha uygun kod yazmaya calisacagim :)
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.