2013-05-31 28 views
8

Bir dizenin sayısal olup olmadığını veya isnumeric işlevini kullanıp kullanmadığını kontrol etmeye çalışıyorum ancak sonuçlar beklendiği gibi değil. Bu işlev yalnızca bir unicode dizgisiyle çalışıyor.Python isnumeric işlevi yalnızca unicode üzerinde çalışır

>>> a=u'1' 
>>> a.isnumeric() 
True 
>>> a='1' 
>>> a.isnumeric() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'str' object has no attribute 'isnumeric' 

isnumeric yalnızca unicode'unda çalışıyorsa ... Bir neden mi?

cevap

5

Genellikle Python bir dize bir sayı olup olmadığını kontrol etmek isteyeceklerdir. Bu her zaman, örneğin kullanıcı girişi ile, veri tabanından (bir dizge döndüren) veri almak veya numaralarını içeren bir dosyayı okumakla olur. Ne tür bir numara beklediğinize bağlı olarak, çeşitli yöntemler kullanabilirsiniz. Örneğin, regex veya kullanarak diziyi ayrıştırmak gibi bir sayıya çevirmek (dönüştürmek) ve 'un ne olduğunu görün. Çoğunlukla Unicode kodlanmış ASCII olmayan numaralarla da karşılaşırsınız. Bunlar sayılar olabilir veya olmayabilir. Örneğin, Thai'de 2 olan. Bununla birlikte, © sadece telif hakkı sembolüdür ve açıkça bir numarası değildir.

linki:

12

Sadece farklı bir ad.

'1'.isdigit() doğru

+0

Dize 'a' de float değerleri içerebilir, bu yüzden isdigit kullanamıyorum .. – user1050619

+2

u'1.5'.isnumeric() = False, isdigit'i kullanın veya kendi işlevinizi yazın. –

4

Python documentation göre, isnumeric Unicode nesneler için mevcut olan:

:

Aşağıdaki yöntemlerde, Unicode nesneler üzerinde mevcut olan unicode.isnumeric()

Eğer S'de yalnızca sayısal karakterler varsa, aksi halde false True döndür. Sayısal karakterler, rakam karakterlerini ve Unicode sayısal değer özelliğine sahip tüm karakterleri, ör. U + 2155, VULGAR FRACTION ONE FIFTH.

1

isnumeric()http://pythoncentral.io/how-to-check-if-a-string-is-a-number-in-python-including-unicode/ Unicode dizeleri farklı numeral systems genişletilmiş destek.

Amerika ve Avrupa'dahaneden oluşan Hindu-Arabic numeral system kullanılır.

Hindu-Arap rakamları, Unicode tarafından da Avrupa rakamları olarak adlandırılır.

mevcut gibi diğer sayısal sistemler şunlardır:

  • Romen rakamlarıyla
  • Antik Yunan rakamları
  • Tamil rakamları
  • Japaneese rakamları
  • Çinli rakamları
  • Kore rakamları
sayı sistemleri hakkında

fazla bilgi burada bulunabilir: wikiwand.com/en/Numerals_in_Unicode#/Numerals_by_script

Unicode subscript, superscript ve fractions da isnumeric() işlevi ile geçerli rakamlarını kabul edilir.


Bir dizenin unicode olmayan bir sayı olup olmadığını kontrol etmek için aşağıdaki isnumeric() işlevini kullanabilirsiniz.

l = ['abc' + chr(255), 'abc', '123', '45a6', '78b', u"\u2155", '123.4', u'\u2161', u'\u2168'] 

def isnumeric(s): 
    '''Returns True for all non-unicode numbers''' 
    try: 
     s = s.decode('utf-8') 
    except: 
     return False 

    try: 
     float(s) 
     return True 
    except: 
     return False 


for i in l: 
    print i, 'isnumeric:', isnumeric(i) 

print '--------------------' 
print u'\u2169', 'isnumeric', u'\u2169'.isnumeric() 
print u'\u2165', 'isnumeric', u'\u2165'.isnumeric() 

Düzenleme: Bu cevaba 2'den fazla bağlantı eklemek için yeterli bir üne sahip bitmez bu yazıyı güncelleyeceğiz.

İlgili konular