Python Yukarı Yuvarlama

Merhaba,
51 tamsayısını 55 'e nasıl yuvarlatabilirim?
yada
56 tamsayısını 60 'a nasıl yuvarlatabilirim?

Aklıma ilk son hanesi 6 ise +4, 7 ise +3, 8 ise +2 ve 9 ise +1 yaptırmak geldi. Aynı şekilde 1 2 3 4 için de farklı 4 tane durum.

Olabilir ama uzun bir yöntem gibi.
10 -> 10
12 -> 15
13 -> 15
16 -> 20
18 -> 20
gibi yuvarlayabilen yerleşik bir işlev olsa …

Merhaba,

Şöyle bir işlev tasarlanabilir.

def yuvarla(n: int):
    return n + 5 - n % 5 if n % 5 != 0 else n
    

assert yuvarla(12) == 15    
assert yuvarla(17) == 20

Şu fonksiyon işinizi görür muhtemelen:

def yuvarla(sayı):
    while not sayı%5==0:
        sayı+=1
    return sayı

Benim sorum ise bu fonksiyon tek satırda yazılabilir mi?

Yazılabilir.

def yuvarla(n: int):
    return n + 5 - n % 5 if n % 5 != 0 else n

Hatta, şöyle yapayım.

def yuvarla(sayi, referans):
    return sayi + referans - sayi % referans if sayi % referans != 0 else sayi
    

assert yuvarla(51, 3) == 51    
assert yuvarla(51, 4) == 52
assert yuvarla(51, 5) == 55
assert yuvarla(51, 6) == 54
1 Beğeni
from math import ceil
n = int(input())
last_digit = n%10
g = ceil(last_digit / 5) * 5
print(n + g - last_digit)
1 Beğeni

eğer 5 in katıysa da yuvarlaması gerekmez mi?
15 → 10
:confused:

Merhaba, soruyu @dildeolupbiten e sormuşsun ama ben de cevap vermek isterim. Başta ben de senin gibi düşündüm ama sorudaki input ları görünce - bir de konu adı python yukarı yuvarlama olduğu için- dildeolupbitenin haklı olduğu görülebilir.

Mesela burada neden 60’a veya 50’ye yuvarlamak yerine 55 e yuvarlanmış gibi vs. vs.

1 Beğeni

Gerekir mi gerekmez mi onu bilmiyorum ben sadece yuvarlama 5’e göre yapılıyorsa, 5’in tam böldüğü sayılar yuvarlanmasın diye onu yazdım, eğer 5’in tam böldüğü sayıların da yuvarlanması isteniyorsa o kısım kaldırılabilir.

“Yukari” derken yukaridaki 5’in katina mi?

math.ceil(x / 5) * 5 bi sure idare eder.

1 Beğeni

Wowww, ben de yukarıda ebele hübelenin ebele hübelesini alıp ubele hebeleden eccele ücceleyi çıkarayım.
Bu çözüme şapka çıkarıyorum :tophat:

Taktim o zaman ben de :cowboy_hat_face:

Yalniz bende 99999999999999995 civarinda patliyor. (Malum, float)

3 Beğeni

Ikınırsak olur gibi.

f = lambda x: (x // 5 + (x % 5 != 0)) * 5

Ama garip, bu işin üstadı adamlar neden böyle bir ceil yazmış ki*(kendilerince bir sebebi vardır mutlaka). -bana ceilin kaynak kodlarını aramak düşer- Bazen ceil çalışmıyor. Ben de daha önce şu problemde problem yaşamıştım. ceil çalışmıyordu. Bu olaydan sonra genelde kendi ceilimi yazıyorum artık.
Not: *Şimdi anladım sanırım, herkes int lerle çalışmıyor ki. Ben şu ana kadar int bazlı düşünmüşüm.