3

簡単な質問があります。プログラムに「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!")
4

3 に答える 3

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最終的には高速になると確信しています。

于 2013-05-06T13:40:06.063 に答える