我有一个简单的问题。我只是想知道如何让我的程序读取“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!")
答案 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
最终会更快。