0

我希望用户输入采用字母数字格式。字母应该来自A-H,数字应该介于两者之间1-7例如A4H7。我不希望用户输入为例如AA,AAA或. 这是我到目前为止所做的:2B22

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")

这不起作用有两个原因。首先,在这种情况下,字母和数字在技术上总是字符串。任何来自键盘的输入都是一个字符串,即使它是一个数字。其次,==运算符用于比较两个对象(这里的“对象”包括字符串或整数甚至类)的相等性,与询问“此对象是否是此类的实例”不同。

我同意其他答案,因为您最好使用正则表达式,但如果您只想使用条件来判断字符串是单字符数字还是字母,您可以使用字符串方法:

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 回答