我正在写一个简单的代码,应该确定汽车的牌照,并说明它是旧的还是新的。 用户输入一个字符串(例如:“ABC123”或“1234POW”),程序应该返回一个带有相应值的字符串:“New”或“Old”
所以,问题是:
l = input("Enter your license plate: ")
if len(l) == 6:
if l[0] and l[1] and l[2] in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
if l[3]and l[4]and l[5] in "1234567890":
print("You have a license plate of an old type")
else:
print("The plate is not valid. Check your input")
else:
print("The plate is not valid. Check your input")
elif len(l) == 7:
if l[0:4] in "1234567890":
if l[4:7] in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
print("You have a license plate of a new type")
else:
print("Your plate is not valid, check your input+")
否则: print(“这看起来不像有效的牌号”)
第11行和第12行:我不知道为什么,但我没有打印“新类型”消息,而是“你的盘子无效,请检查输入+”。
但如果我将第12行更改为“如果l [4]和l [5]以及”ABCDEFGHIJKLMNOPQRSTUVWXYZ中的[6] - 一切正常。
感谢您的解释,请原谅,如果我发布了某些内容或某种错误 - 我是新来的:D 谢谢。
答案 0 :(得分:3)
l[4:7]
是一个长度为3的字符串。因此,假设l
为"1234POW"
,则l[4:7]
为"POW"
。您的长字符串"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
不包含子字符串"POW"
。
如果要检查长字符串中的每个字符序列,可以使用函数all
。
if all(ch in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" for ch in l[4:7]):
...
甚至只是
if l[4:7].isupper():
您已离开l[0:4] in "1234567890"
,因为"1234"
是"1234567890"
的确切子字符串。如果您有不同的数字,那就不会有效,原因与上述相同。
相反,您可以使用:
if l[:4].isdigit() and l[4:7].isupper():
另一方面,你的上限
if l[0] and l[1] and l[2] in "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
也错了。 Python将此理解为
if (l[0]) and (l[1]) and (l[2] in "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
即
if l[0] is not zero
and l[1] is not zero
and l[2] is in "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
所以你的上限也应该改变:
e.g。
if l[:3].isupper() and l[3:6].isdigit():
...
答案 1 :(得分:0)
这通常是一个正则表达式问题。 https://docs.python.org/3/library/re.html
试试这样的事情:
import re
new_plate_re = re.compile(r'^\D{3}\d{3}$')
old_plate_re = re.compile(r'^\d{3}\D{3}$')
def check_plate(plate_num):
match_new = new_plate_re.match(plate_num)
if match_new is not None:
print("You have a license plate of a new type")
return
match_old = old_plate_re.match(plate_num)
if match_old is not None:
print("You have a license plate of a old type")
return
print("Unknown format!")
答案 2 :(得分:0)
set()
函数。总的来说,它看起来像这样:
if set(l[0:3]).issubset("ABCDEFGHIJKLMNOPQRSTUVWXYZ"):
if set(l[3:6]).issubset("1234567890"):
# ...