Python Sıcaklık Birim Dönüştürücü Kodu

Celsius, Fahrenheit, Kelvin arasında geçiş yapan bu program, hem temel matematiksel işlemleri hem de kullanıcıdan veri almayı, hata yönetimini ve döngüleri pratik etmek için birebir.
Sıcaklık dönüşümünde kullanılan formüller:
- °F = (°C × 9/5) + 32
- °C = (°F – 32) × 5/9
- K = °C + 273.15
Sıcaklık dönüşümü için kullanıcıdan sıcaklık değeri ve birimi alıp diğer birimlere dönüştüren kodlar aşağıdaki gibidir.
def main():
# Geçerli birimler
gecerli_birimler = {'C', 'F', 'K'}
while True:
try:
# Sıcaklık değerini al
deger_str = input("Sıcaklık değerini girin (örnek: 25.5): ")
deger = float(deger_str) # ondalık sayı olabilir
# Birimi al
birim = input("Birimi girin (C, F, K): ").upper()
# Birim geçerli mi?
if birim not in gecerli_birimler:
print("Hatalı giriş! Birim C, F veya K olmalıdır.\n")
continue
# Mutlak sıfır kontrolü (fiziksel olarak geçersiz sıcaklıklar)
if birim == 'K' and deger < 0:
print("Hatalı giriş! Kelvin değeri 0'dan küçük olamaz.\n")
continue
if birim == 'C' and deger < -273.15:
print("Hatalı giriş! Celsius değeri -273.15'ten küçük olamaz.\n")
continue
if birim == 'F' and deger < -459.67:
print("Hatalı giriş! Fahrenheit değeri -459.67'den küçük olamaz.\n")
continue
except ValueError:
print("Hatalı giriş! Lütfen sayısal bir değer girin.\n")
continue # Tekrar sor
# --- Geçerli giriş yapıldı, dönüşümleri yap ---
if birim == 'C':
f = deger * 9/5 + 32
k = deger + 273.15
print(f"\n{deger} °C = {f:.2f} °F = {k:.2f} K")
elif birim == 'F':
c = (deger - 32) * 5/9
k = (deger - 32) * 5/9 + 273.15
print(f"\n{deger} °F = {c:.2f} °C = {k:.2f} K")
else: # birim 'K'
c = deger - 273.15
f = (deger - 273.15) * 9/5 + 32
print(f"\n{deger} K = {c:.2f} °C = {f:.2f} °F")
break # Doğru giriş yapıldı ve sonuç gösterildi, program biter.
if __name__ == "__main__":
main()Ancak ondalık sayılarla ilgili bir problemimiz var. Normalde Python’da ondalık sayı girince . (nokta) kullanırız. Ama gerçek hayatta biz ve çoğu Avrupa / Amerika ülkesi ise , (virgül) kullanırız. ABD, İngiltere ve zamanında İngiliz himayesinde bulunan bazı diğer ülkeler İngiliz sisteminde olduğu gibi . (nokta) kullanır.
Aşağıdaki sıcaklık birim dönüştürücü kodu da buna dikkat ederek revize edilmiştir.
def main():
gecerli_birimler = {'C', 'F', 'K'}
while True:
try:
# Kullanıcıdan sıcaklık değerini al
deger_str = input("Sıcaklık değerini girin: ")
# Virgülü noktaya çevir (Türkçe ondalık ayracı desteği)
deger_str = deger_str.replace(',', '.')
deger = float(deger_str)
# Birim al
birim = input("Birimi girin (C, F, K): ").upper()
if birim not in gecerli_birimler:
print("Hatalı giriş! Birim C, F veya K olmalıdır.\n")
continue
# Mutlak sıfır kontrolü (fiziksel geçerlilik)
if birim == 'K' and deger < 0:
print("Hatalı giriş! Kelvin değeri 0'dan küçük olamaz.\n")
continue
if birim == 'C' and deger < -273.15:
print("Hatalı giriş! Celsius değeri -273.15'ten küçük olamaz.\n")
continue
if birim == 'F' and deger < -459.67:
print("Hatalı giriş! Fahrenheit değeri -459.67'den küçük olamaz.\n")
continue
except ValueError:
print("Hatalı giriş! Lütfen sayısal bir değer girin (örnek: 25.5 veya 24,5).\n")
continue
# --- Geçerli giriş, dönüşümleri yap ---
if birim == 'C':
f = deger * 9/5 + 32
k = deger + 273.15
print(f"\n{deger} °C = {f:.2f} °F = {k:.2f} K")
elif birim == 'F':
c = (deger - 32) * 5/9
k = (deger - 32) * 5/9 + 273.15
print(f"\n{deger} °F = {c:.2f} °C = {k:.2f} K")
else: # birim 'K'
c = deger - 273.15
f = (deger - 273.15) * 9/5 + 32
print(f"\n{deger} K = {c:.2f} °C = {f:.2f} °F")
break # Başarılı, program sonlanır
if __name__ == "__main__":
main()Aslında yaptığımız değişiklik şudur. Kişi virgül ile ondalık sayı giriyorsa python bunu anlamadığı için girilen değerdeki virgül’ü # deger_str = deger_str.replace(‘,’, ‘.’) satırı ile noktaya çevirmemiz gerekti.
Örnek Çıktı 1:
Sıcaklık değerini girin: 36
Birimi girin (C, F, K): c
36.0 °C = 96.80 °F = 309.15 K
Örnek Çıktı 2:
Sıcaklık değerini girin: -35
Birimi girin (C, F, K): f
-35.0 °F = -37.22 °C = 235.93 K
Örnek Çıktı 3:
Sıcaklık değerini girin: 110.5
Birimi girin (C, F, K): k
110.5 K = -162.65 °C = -260.77 °F
