0

誰かが自分の電話番号を入力したときに入力される可能性のある () と - をプログラムで削除したいと考えています。また、ループが生成されない場合は、10 文字の長さであることを確認したいと思います。

p = raw_input("Please enter your 10 digit Phone Number")
def only_numerics(p):
    seq_type= type(p)
    return seq_type().join(filter(seq_type.isdigit, p))
p = only_numerics(p)

valid_phone = False
while not valid_phone:

    if p > "0000000000" and p < "9999999999" and len(p) == 10 :
        print "You have entered " + p
        valid_phone=True
    else:
        print "You have entered an invalid choice"

10 個未満の数字を入力すると、else print コマンドが繰り返されます。生入力(「10桁の電話番号を入力してください」)に戻してほしいです。これを行う方法はありますか?

4

5 に答える 5

2

James が指摘したように、ループ内で「raw_input」を設定する以外に、正規表現を使用してコードをより美しくすることに興味があるかもしれません。

import re
phone_re = re.compile(r'\d{10}$')

def only_numerics(p):
    seq_type= type(p)
    return seq_type().join(filter(seq_type.isdigit, p))

valid_phone = False
while not valid_phone:
    p = raw_input("Please enter your 10 digit Phone Number: ")
    p = only_numerics(p)
    if phone_re.match(p):
        print "You have entered " + p
        valid_phone=True
    else:
        print "You have entered an invalid choice"
于 2013-04-20T23:03:18.257 に答える
1

while ループの外で p を定義しているため、print ステートメントにループ バックします。これを変更すると、ループの問題が修正されます。

valid_phone = False
while not valid_phone:

    p = raw_input("Please enter your 10 digit Phone Number")
    def only_numerics(p):
        seq_type= type(p)
        return seq_type().join(filter(seq_type.isdigit, p))
    p = only_numerics(p)


    if p > "0000000000" and p < "9999999999" and len(p) == 10 :
        print "You have entered " + p
        valid_phone=True
    else:
        print "You have entered an invalid choice"
于 2013-04-20T22:53:28.790 に答える
0

def val_number(input_num):

valid_num=re.findall(r'\d+',input_num)
if len(valid_num[0])>10:
    print('You have entered more than 10 digits')
else:
    return(valid_num)
于 2015-08-03T12:29:36.263 に答える