import math
import random
x = random.randint(5, 100)
y = random.randint(10, 50)
if x > y:
print(“x ve y birer tam sayıdır.”)
print(“x =”, x, “y =”, y)
if x > y:
process = math.gcd(x, y)
print(“x’in y’ye ebobunu bulunuz.”)
answer2 = print(input(“cevabınızı yazınız:”))
if answer2 == process:
print(“cevap doğru”)
if answer2 != process:
print(“cevap yanlış”)
print(“doğru cevap =”, process)
if x < y:
print(“x ve y birer tam sayıdır.”)
print(“x =”, x, “y =”, y)
if x < y:
process2 = math.sqrt(x + y)
print(“x+y’nin karekökünü alınız.”)
answer4 = print(input(“cevabınızı yazınız:”))
if answer4 == process2:
print(“cevap doğru”, process2)
elif answer4 != process2:
print(“cevap yanlış”)
print(“doğru cevap =”, process2)
#math.sqrt’yi denemedim ama ebobu doğru yazsan da cevabı yanlış kabul ediyor. büyük ihtimalle diğerinde de aynı şey olacak sebebini bilen birisi var mıdır?
x ve y birer tam sayıdır.
x = 70 y = 31
x’in y’ye ebobunu bulunuz.
cevabınızı yazınız:1
1
cevap yanlış
doğru cevap = 1
Girintiler Python’da büyük önem arz ediyor, onları düzeltmek isteyebilirsiniz. Bu arada kullanıcıdan aldığınız girdiyi yazdırmayı deneyebilirsiniz, print(answer2); gerçekten doğru mu değil mi anlaşılabilir.
girintilerden yana bir porblem varmış gibi gözükmüyor. burda girintiler gözükmese de orjinalinde var. bahsettiğin print(answer2); kodunu hangi satıra eklemeliyim
O zaman ilk gönderide paylaştığınız kodları çalıştırmıyorsunuz? answer2 = print(input(...)) dediğinizde answer2'ye None atanıyor print fonksiyonunun döndürdüğü değer o olduğundan. input halihazırda içerisine yolladığınızı ekrana yazıyor; print'e gerek yoktur, olması da zarardır.
Şimdi de “büyük ihtimalle” answer2 = input(...)'a döndünüz, doğru mudur? input fonksiyonunun döndürdüğünün veri tipi string’dir, math.gcd'nin döndürdüğününki ise int oluyor; bu iki farklı veri tipinin değerleri birbirine eşit olmuyor ve if es geçiliyor. Yani "1" == 1'in değeri False oluyor. answer2 = int(input(...)) diyerek answer2'yi tam sayıya çevirebilirsiniz. Bir de
if answer2 == process:
...
if answer2 != process:
...
Çok teşekkürler inputu int atayınca düzeldi. Daha ilk günüm yeni yeni deniyorum bazı şeyleri inputun str değeri aldığını öğrenmem iyi oldu teşekkürler.
peki ben kareköklü ikinci işlemin sonucunu yuvarlanmış bir biçimde görmek ve int input’ta da yuvarlanmış cevabın doğru olarak atanmasını istiyorum. Bunun için ne yapabilirim.
düzenleme: “math.ceil(math.sqrt)” yaptım düzeldi. yine de farklı bir yöntem varsa bilgilendirirsen sevinirim.
Yuvarlamaktan kastınız nedir tam olarak? Galiba 4 çeşit var piyasada, birisini seçebilirsiniz:
math.ceil: Bu, verilen sayıyı +sonsuza doğru yuvarlıyor. “ceil” ifadesi “ceiling” yani "tavan"dan geliyor zannediyorum. Hep yukarıya, tavana doğru yuvarla diyoruz:
>>> math.ceil(2.14)
3
>>> math.ceil(2.77)
3
>>> math.ceil(-7.84)
-7
>>> math.ceil(-7.002)
-7
>>> math.ceil(18) # burada yuvarlanacak pek bir şey yok takdir edersiniz ki...
18
math.floor: Bu da verilen sayıyı -sonsuza doğru yuvarlıyor. "floor"un karşılığı "yer"dir; hep aşağıya, yere doğru yuvarla diyoruz:
>>> math.floor(2.14)
2
>>> math.floor(2.77)
2
>>> math.floor(-7.84)
-8
>>> math.floor(-7.002)
-8
>>> math.floor(18) # burada yuvarlanacak pek bir şey yok takdir edersiniz ki...
18
round: Bu gömülü (yani built-in) bir fonksiyondur, math modülünden almayız, direkt kullanıma açıktır. “Normal” yuvarlama diyebileceğimiz budur galiba; küsuratın 0.5’e göre konumuna bakarak yakın olduğu tam sayıya yuvarlıyor:
>>> round(2.14)
2
>>> round(2.77)
3
>>> round(-7.84)
-8
>>> round(-7.002)
-7
>>> round(18) # burada yuvarlanacak pek bir şey yok takdir edersiniz ki...
18
int: Bu da gömülüdür. Başka veri tiplerinden tam sayı gibi görünenleri tam sayıya çevirme (“cast” etme) işlevi de vardır (sizin input'un ardına yazdığınız gibi). Dolayısıyla küsuratlı sayılara uygulandığında bir çeşit yuvarlama meydana geliyor. Tam olarak yuvarlama diyebilir miyiz bilemiyorum; verilen sayının tam sayı kısmını alıp küsuratı olduğu gibi görmezden geliyor. Bu yaptığına “truncating” de denir:
>>> int(2.14)
2
>>> int(2.77)
2
>>> int(-7.84)
-7
>>> int(-7.002)
-7
>>> int(18) # burada yuvarlanacak pek bir şey yok takdir edersiniz ki...
18
round bir parametre daha alıyor, “kaç basamağa yuvarlayayım” için. int'in de “hangi tabandan çevireyim” diye ayrı bir parametresi de var. Bunlar ve daha fazlası için ilgili dokümantasyonları ziyaret edebilirsiniz: int, round.
round daha iyi oldu ceil sürekli yukarıya doğru yuvarlıyor. teşekkürler kolay gelsin.
bu arada kitap olur birşey olur pythona dair daha fazla şey öğrenebileceğim bir yerler paylaşır mısın.