确保字符串中没有整数?

时间:2013-05-06 13:23:17

标签: python string integer

我有一个简单的问题。我只是想知道如何让我的程序读取“input()”并查看字符串中是否有整数或任何类型的数字,如果是,则打印出一条消息说明。我只是想知道如何确保没有人输入他们名字的号码。谢谢!

yn = None
while yn != "y":
    print("What is your name?")
    name = input()
    print("Oh, so your name is {0}? Cool!".format(name))
    print("Now how old are you?")
    age = input()
    print("So your name is {0} and you're {1} years old?".format(name, age))
    print("y/n?")
    yn = input()
    if yn == "y":
        break
    if yn == "n":
        print("Then here, try again!")
print("Cool!")

3 个答案:

答案 0 :(得分:3)

查看字符串

中是否有整数或任何类型的数字
any(c.isdigit() for c in name)

为“123”,“123.45”,“abc123”等字符串返回True

答案 1 :(得分:3)

使用str.isdigit() method字符串以及any() function

if any(c.isdigit() for c in name):
    # there is a digit in the name
对于只包含数字的字符串,

.isdigit()返回True。这包括标记为数字或数字小数的任何Unicode字符。

any()遍历您传入的序列,并在找到True的第一个元素后立即返回True,如果所有元素都是{{}则返回False 1}}。

演示:

False

答案 2 :(得分:2)

根据字符串的不同,正则表达式可能实际上更快:

import re

s1 = "This is me"
s2 = "this is me 2"
s3 = "3 this is me"

regex = re.compile(r'\d')
import timeit
def has_int_any(s):
    return any(x.isdigit() for x in s)

def has_int_regex(s,regex=re.compile(r'\d')):
    return regex.search(s)

print bool(has_int_any(s1)) == bool(has_int_regex(s1))
print bool(has_int_any(s2)) == bool(has_int_regex(s2))
print bool(has_int_any(s3)) == bool(has_int_regex(s3))


for x in ('s1','s2','s3'):
    print x,"any",timeit.timeit('has_int_any(%s)'%x,'from __main__ import has_int_any,%s'%x)
    print x,"regex",timeit.timeit('has_int_regex(%s)'%x,'from __main__ import has_int_regex,%s'%x)

我的结果是:

True
True
True
s1 any 1.98735809326
s1 regex 0.603290081024
s2 any 2.30554199219
s2 regex 0.774269104004
s3 any 0.958808898926
s3 regex 0.656207084656

(请注意,即使在专门为any设计的情况下,正则表达式引擎也会获胜最快)。但是,如果字符串越长,我愿意打赌any最终会更快。