Kullanıcının yanıtı doğru olsa da program ilgili if'in içerisine ilerlemiyor

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

sonuç bu şekilde çıkıyor

bkz: Soru Sorarken Sıkça Düşülen Hatalar #1

Merhabalar.
Kodunuzu buraya göre düzenlerseniz size daha kolay yardımcı olabiliriz.

1 Beğeni

açıklayıcı bir linkti tşkrler

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.

1 Beğeni

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

Ama buradaki kişilerin yardımcı olabilmesi için burada da olması gerekmez mi…

answer2’nin tanımlandığı satırdan sonraki herhangi bir satır olabilir. answer2 değişkeninin değerini yazdırıyor zira.

answer2 'yi yazdırdım ama sonuç yine aynı
kullanıcının cevabını 1 olarak alıyor ondan sonra cevap yanlış kısmına geçip doğru cevap 1 yazdırıyor.

Evet, sonucu direkt değiştirecek bir hamle değildi zaten. Ne yazdı ekrana? Ondan şüphelenmeniz gerekiyor.

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

sonuç böyle çıkıyor.

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:
    ...

yerine

if answer2 == process:
    ...
else:
    ...

tercih edilir, else.

1 Beğeni

Ç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.

1 Beğeni

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.

2 Beğeni

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.

https://docs.python.org/3/
  https://docs.python.org/3/tutorial/index.html
  https://docs.python.org/3/library/index.html

https://stackoverflow.com/questions/tagged/python?tab=Votes

https://python-istihza.yazbel.com/

1 Beğeni

“Sifira dogru yuvarlama” diyebiliriz.

2 Beğeni