
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
