0

これが私のコードです(小さな構文ミスに注意してください:

UserID = input("Please enter your UserID ")

if len(UserID) !=6:
    print("Wrong Format")

elif UserID[:1] == (UserID[:1]).lower():
    print("Wrong Format")

elif UserID[1:3] == (UserID[1:3]).upper():
    print("Wrong Format")

elif UserID[3:] > ord(UserID[3:]):
    print("Wrong Format")

else
    print("Correct Format")

基本的に、このプログラムの目的は、大文字 1 文字、小文字 2 文字、数字 3 桁の 6 文字の UserID を持つことです。

Abc123

ここで問題が発生します

elif UserID[3:] > ord(UserID[3:]):
    print("Wrong Format")

ord() 関数はリストに相当する ASCII を評価できません。私はそれがキャラクターのためのものであることを知っているので、私は何をすべきかについて立ち往生しています. コードのこのセクションは、3 番目の要素以降の数値が数値であることを確認するためのもので、ASCII の 9 に相当する数値よりも小さくなります。

4

3 に答える 3

1

文字列が整数のみで構成されているかどうかを確認するには、次を使用できますstr.isdigit()

elif not UserID[3:].isdigit():
    print("Wrong Format")

str.isdigit()どうやら、(コメントから)、整数でなくてもTrueを返すものがいくつかあります。これを修正するには、次のようにします。

elif not all(c in "0123456789" for c in UserID[3:]):
    print("Wrong Format")
于 2016-03-11T18:20:46.100 に答える
1

参考までに、ユーザー名全体を正規表現で検証する方法を次に示します。

import re

if re.match('^[A-Z][a-z]{2}[0-9]{3}$', UserID):
    print("Correct Format")
else:
    print("Wrong Format")

既存のコードでは、必要のないすべての数値であることを確認するには、それらの間に含まordれるすべての文字を比較するだけです。09

if not all(c >= '0' and c <= '9' for c in UserID[3:]):
    print("Wrong format")
于 2016-03-11T18:21:22.240 に答える
0

次のように単純化できます。

UserID = input("Please enter your UserID ")

if ( (len(UserID) !=6) or UserID[0].islower() 
     or UserID[1:3].isupper() or not UserID[3:].isdigit() ) :
    print("Wrong Format")

else
    print("Correct Format")
于 2016-03-11T18:36:09.103 に答える