2014-01-29 2 views
2

Что является наиболее эффективным способом, чтобы проверить, если юникода это цифра или десятичная, я знаю, что могу сделать различные, если такие заявления:эффективный способ проверить, если юникода это цифра или десятичная в Python

if unicode.isdigit(self.initial_bet.text) and unicode.isdigit(self.initial_odds.text)... 

Юникод может быть как двухзначным, так и двоичным типом или комбинацией, есть ли лучший способ проверить другие, кроме многих операторов if?

Pseudocoe:

если это цифра б это цифра: возвращение функ

Элиф а является десятичным и б десятичное: возвращение функ

Элиф а является цифра и б десятичное: возвращение функ

и так далее ....

еще сделать что-то еще

+1

Просьба представить полный комплект заявлений, которые вы рассмотрели. Также обратите внимание, что если 'self.initial_bet.text' уже является строкой unicode, вы можете просто сделать' self.initial_bet.text.isdigit() ' – krait

+0

@krait добавил псевдокод –

+0

Вы хотите только 2 значения или могли бы быть больше? –

ответ

4

Если все входы должны быть либо десятичной или цифрой, то следующий будет работать:

conds = [unicode.isdigit, unicode.isdecimal] 
check = lambda v: any(f(v) for f in conds) 

vals = [self.initial_bet.text, self.initial_odds.text] 

if all(map(check, vals)): 
    return func 
# do something else 

Это будет работать для любого числа входов и любого количества условий, так что каждый вход должен удовлетворять хотя бы одному условию.

Также представляется, что unicode.isdigit является надмножеством функциональности unicode.isdecimal, поэтому любое десятичное число должно быть цифрой - большая часть разницы лежит в различных сценариях unicode, но с диапазоном ASCII функции должны иметь одинаковое поведение.

+0

, который отлично работает. Благодарю. –

0

Я не совсем понимаю, что вы делаете, но вы пробовали использовать isinstance (значение, тип).

if isinstance(a, int) and isinstance(b, float): 
    return foo 




res = [i for i in map(lambda x: isinstance(x, int) or isinstance(x, float),[.5, 'a', 3, 4, 5])] 
+0

, как и в псевдокоде a или b, может быть любая комбинация десятичных чисел или int, поэтому использование isinstance все равно потребует нескольких операторов ifif –

Смежные вопросы