0

ユーザー入力を文字番号の形式にしたい。文字は fromA-Hで、数字はその間にある必要が1-7ありA4ますH7。ユーザー入力を、、、、などAAにしたくありません。これは私がこれまでに行ったことです:AAA2B22

x=input("Write something:")

if len(x) !=2:
    print("Wrong")

letter=x[0]
number= x[1]

if number >=8:
    print("Wrong")

if letter not ["A","B","C","D","F","G"]:
    print("Wrong")

if letter == int:
    print("Wrong")

if number == str:
    print("Wrong")

else:
    print("Perfect")
4

4 に答える 4

4

私は正規表現の一致でこれを行います:

import re

x=input("Write something: ")

if re.match('^[A-H][1-7]$',x):
     print('Perfect!')
else:
     print ('Wrong')

正規表現は、適合'^[A-H][1-7]$'しなければならないパターンです。x

^      # This character matches the start of the string
[A-H]  # After the start of the string we allow the group A-H (A,B,C,D,E,F,G,H)
[1-7]  # The next character must be a digit between 1 and 7
$      # This character matches the end of the string

アンカーの使用は、^,$の長さxが2でなければならないことを意味します。これは暗黙的であるため、これを個別にチェックする必要はありません。

正しい値が受信されるまでループする改善:

import re

while not re.match('^[A-H][1-7]$',input("Write something: ")):
     print('Wrong')

print('Perfect!')

デモ:

Write something: 11
Wrong
Write something: AA
Wrong
Write something: a1
Wrong
Write something: A9
Wrong
Write something: A1
Perfect!
于 2012-12-19T18:07:50.427 に答える
1
if letter == int:
    print("Wrong")

if number == str:
    print("Wrong")

これは 2 つの理由で機能しません。まず、この場合、文字と数字の両方が技術的に常に文字列です。キーボードからの入力は、数字であっても文字列です。次に、==演算子は 2 つのオブジェクト (ここでは文字列、整数、またはクラスを含む「オブジェクト」) の等価性を比較するためのものであり、「このオブジェクトはこのクラスのインスタンスか」と尋ねることと同じではありません。

正規表現が最適であるという点で他の回答に同意しますが、条件を使用して文字列が1文字の数字か文字かを判断したい場合は、文字列メソッドを使用してそれを行うことができます:

if not letter.isalpha():
    print("Wrong")

if not number.isdigit():
    print("Wrong")
于 2012-12-19T18:13:38.163 に答える
0

正規表現を使用するのに最適なシナリオ

import re
x=input("Write something: ")
print("Perfect" if re.match('^[A-H][1-7]$', x) else "Wrong")
于 2012-12-19T18:27:22.217 に答える
0

これは正規表現の完璧なユースケースです。

import re
x = input("Write something")
if re.match("^[A-H][1-7]$", x):
    print("Perfect")
于 2012-12-19T18:07:56.453 に答える