b="-4"
print(b.isdigit())
çıktı : False
isdigit int değerlerini true döndüren bir fonksiyon fakat int değerinin önünde bir operatör olunca false döndürüyo bunu nasıl aşabilirim
b="-4"
print(b.isdigit())
çıktı : False
isdigit int değerlerini true döndüren bir fonksiyon fakat int değerinin önünde bir operatör olunca false döndürüyo bunu nasıl aşabilirim
bu doğru ama senin b değişkenine atadığın değer bir int değil, str. Tırnakları kaldır.
Düzenleme: isdigit bir string fonksiyonu olduğu için yukarıda yazdıklarım da hata verecek. Tırnakları kaldırdığında isdigit’i artık kullanamıyor olacaksın. O yüzden bu yanlış bir çözümdü. Bu daha makul: Python isdigit fonksiyonu operatörleri algılamıyo - serhank tarafından #5
b="4"
print(b.isdigit())
print(type(b))
çıktı:
True
<class 'str'>
amacım zaten stringin içindeki int yi bulmak tırnakları kaldırırsam değer int olucak bir anlamı olmuyo
b=("4","-3","3")
for i in b:
print(i.isdigit(),i)
Çıktı:
True 4
False -3
True 3
önünde operatör olunca string ifade olarak algılıyo sorun orda başlıyo
Bu sayısal değerleri size string olarak tutmak zorunda olduğunuzu düşündüren şey nedir?
İlla böyle yapacağım diyorsanız, operatörden kurtulmanız lazım çünkü “-” sayısal bir ifade değil ve haliyle isdigit fonksiyonu False değer döndürecek.
“-” bunun sayısal bir ifade olmadığının farkındayım ama diğer şartlarda “-15” bu sayısal bir ifade .
Ne yazıkki ben bu şekilde veri tutmuyorum alınan veri bu şekilde ve dönüşümünü sağlamaya çalışıyorum .
a=+15
Bu değişkenin type ı int değeri döndürüyosa isdigit “+15” i neden false döndürüyo çünkü operatörü operatör olarak değilde string bir ifade olarak algılıyo pythonda operatörlerin farklı bir şekilde tanımlanması var mı bilmiyorum
sayi = "-15"
if sayi[0] == "-":
print(sayi[1:].isdigit())
else:
print(sayi.isdigit())
Sayı negatif ise farklı, pozitif ise farklı davranmamız lazım öyleyse. Bu kodu daha pratik olarak şöyle de yazabiliriz: print(sayi[1:].isdigit() if sayi[0] == "-" else sayi.isdigit())
Bu kodumun içinde yüksek ihtimal bi karmaşa yaratıcak ama bir deniycem keşke operatörü opratör olarak görmesini sağlıyabilsek yinede teşekkür ederim
Değil…
>>> help(str.isdigit)
Help on method_descriptor:
isdigit(self, /)
Return True if the string is a digit string, False otherwise.
A string is a digit string if all characters in the string are digits
and there is at least one character in the string.
İstisnasız her karakter bir rakama tekabül ediyorsa ve en az bir karakter varsa True, değilse False döndürür.
Tam olarak amacınızı anlayamadım ama şu yanıtın “Ama” ile başlayan kısmı belki işinize yarayabilir.
Daha fazla karmaşa 
def str_to_int(string):
try:
int(string)
return True
except ValueError:
return False
def is_digit(string):
operator_count = sum(string.count(operator) for operator in ("+", "-"))
if operator_count == 1:
operator = "+" if string.count("+") == 1 else "-"
left, right = string.split(operator)
if len(left) == 0:
return str_to_int(right)
else:
return False
elif operator_count == 0:
return str_to_int(string)
else:
return False
print(is_digit("-4"))
print(is_digit("+4"))
print(is_digit("4"))
print(is_digit("a"))
print(is_digit("-a"))
print(is_digit("2+2"))
print(is_digit("4-"))
True
True
True
False
False
False
False
Çok iyi teşekkür ederim bence fonksiyonun genel olarak bu şekilde çalışması lazım.
Kesinlikle karmaşa yaratmıycak fonksiyonu değiştirip sadece is_digit kullanıcam ![]()
Bu fonksiyonun amacı tam olarak nedir?
Bir string ifadenin tam sayı olup olmadığını kontrol ediyor. İçerisinde '+' veya '-' bulunan string ifadeler de dahil. Örneğin '-1956' girdisi, bize True değerini döndürüyor. Normalde isdigit() methodu bunu sağlamıyor. Ben de isdigit() methoduna böyle bir alternatif sunmak istedim.
İstenen şey kısaca int() kullanılarak da yapılabilirdi. Fakat belirttiğim gibi, “daha fazla karmaşa”.
def sayı(girdi):
try:
int(girdi)
return True
except:
return False
Evet bu yeterliymiş aslında nedense çok farklı bakmıştım ilk başta olaya sizin kodunuzdan sonra bakış açım değişti.