Bu kodu nasıl tek satırda yazabilirim?

def countdown(integer:int,string:str):
        for i in range(integer,0,-1):
            print(i,".",end = "")
        print("",string)

Bu kodu nasıl tek satırda yazabilirim ?(Lambda ile denedim ancak pek bilmedeiğimden başaramadım.)

Sanırım başardım :slight_smile:

x = lambda integer,string : [[print(i,".",end = "",sep = "") for i in range(integer, 0, -1)],print("",string)]
1 Beğeni

Merhaba.

Hmm, tam olmamış sanki. Hem dönüş değeri de None değil. Bunu bir deneyin istiyorsanız:

x = lambda integer,string : [print(i,".",end = "") for i in range(integer, 0, -1)] and print("",string)
1 Beğeni

Yeni başladım pek bilgim yok ancak None dönmesi kötü birşey değil mi ? ben printin içine yazmıyorum fonksiyonu direk normal bir şekilde çalıştırıyorum ve none dönmüyor.

Kötü veya iyi nasıl diyeceğiz bilemiyorum, amaca bağlı. Eğer biz hiçbir şey döndürmezsek None döner. Eğer fonksiyonumuzun bir değer döndürmesini istiyorsak o zaman istediğimiz değeri döndürürüz.

Evet, çünkü bir şey döndürmüyor (yani None döndürüyor, ama None değerleri etkileşimli kabukta ekrana yazılmaz. Sadece None yazıp entere bassanız bile bir şey yazılmamış olur), döndürmesine gerek var mı? Sizin asıl kodunuz da döndürmüyordu (yani None döndürüyordu), o yüzden bunu o şekilde yazdım.

Lambda ile yazamazsin (type hintleri verilmiyor) ama gerek de yok:

def countdown(integer:int,string:str):
    [print(i,".",end = "") for i in range(integer,0,-1)];
    print("",string)

Ama tek satirda yazmak cok sacma, niye boyle bir sey istiyorsun?

Tek expression olarak yazmak cok daha faydali bir sey (ve lambda kullanmayi mumkun kiliyor).

def countdown(integer:int, string:str):
    print(" .".join(list(map(str, range(integer,0,-1))) + [" " + string]))

Ama tabi side effect’leri olan (–i gectim, sadece side effect’lerden olusan) bir fonksiyonu tek expression’a indirmeye calismak da sacma bir caba.

1 Beğeni