这是哈佛大学的CS50P,给出的要求是我应该实现一个函数is_valid,检查用户输入是否符合虚荣板的要求。
我的代码满足所有要求,除了"使用的第一个数字不能是' 0 '。">
函数is_valid需要一个if/else语句,该语句接受用户输入(string)(作为" "传递给is_valid),并确保其中的第一个数字不是0。
理想情况下,如果找到的第一个数字是0,它将返回False,因为这会使车牌作为虚荣车牌无效。
要求列在这里:https://cs50.harvard.edu/python/2022/psets/2/plates/
我的代码如下:(注释删除,因为我没有得到Github格式)
def main():
plate = input("Plate: ")
if is_valid(plate):
print("Valid")
else:
print("Invalid")
def is_valid(s):
if len(s) < 2 or len(s) > 6:
return False
if s[0].isdigit() == True or s[1].isdigit() == True:
return False
for i in range(len(s)): #
if s[i].isdigit():
if not s[i:].isdigit():
return False
if s.isalnum() == False:
return False
else:
return True
main()
首先你必须在字符串上循环,如果当前char是一个数字,那么如果它是0,返回False,否则,进入下一步
for i in s:
if i.isdigit():
if int(i)==0:
return False
else:
break
满足程序所有要求的一个可能的完整解决方案是:
def main():
plate = input("Plate: ")
if is_valid(plate):
print("Valid")
else:
print("Invalid")
def is_valid(s):
#We verify that the first number is not zero and the others are alphanumeric
for i in range(len(s)):
if s[i].isdigit() :
if int(s[i]) == 0 :
return False
elif not(s[i+1::].isalpha()) == False: #Check if the following characters are digits
return False
#----------------------------------------------------------------
if len(s) < 2 or len(s) > 6:
return False
elif s[0].isdigit() or s[1].isdigit(): #We optimize the logical operators
return False
elif s.isalnum() == False:
return False
else:
return True
main()
如果数字等于0,则只需插入第一个数字验证:
if s[i].isdigit() and s[i] == '0':
应该足够了!:)