枚举输入
Enumerating over a input
基本上,我的 objective 这样做是为了在枚举之后更容易编写 if 语句,以查看输入字符串是否包含字符串中间的任何数字..如果它包含比到 return True 所以它是无效的......这可能是在主要功能中执行此操作的几个问题但希望有人可以让我知道我是否正在以“智能”方式进行此操作,以及如何实际将其正确实现到主函数中。
import string
def main():
plate = input("Plate: ")
return_val = exclusions(plate)
checkplate = platecheck(plate)
if return_val:
print("Invalid")
else:
print(checkplate)
print("Valid")
def exclusions(s):
new_string = s.translate(
str.maketrans('', '', string.punctuation))
if len(new_string) < len(s):
print("Please do not use punctuation")
return True
elif 2 <= len(new_string) <= 6:
return False
else:
return True
def platecheck(s):
for i, l in (enumerate(s, 1)):
print(l, i) # Some sort of if statement here
main()
就排除功能而言,目前一切正常,确保没有标点符号,并确保输入在 2 到 6 个字符之间。
input/output 正常工作的示例:
输入:
t33st
输出:
Numbers only allowed at the end of the plate
Invalid
当前输出:
t 1
3 2
3 3
s 4
t 5
None
Valid
确定尾部是否为数字的一种简单方法是找到第一个数字并对字符串的其余部分调用 isdigit
:
def platecheck(s):
first = next(i for i, c in enumerate(s), len(s))
return not s[first:].isdigit()
一个更通用的用于检查文本模式的工具称为 regular expressions, which python implements via the re
模块:
plate_pattern = re.compile('\D*\d*')
def platecheck(s):
return not plate_pattern.fullmatch(s)
你可以exclusions
更优雅地写成
def exclusions(s):
if any(c in string.punctuation for c in s):
print("Please do not use punctuation")
return True
return len(s) > 6 or len(s) < 2
因为 True 表示有问题,你应该将你的函数与 or
:
结合起来
return_val = exclusions(plate) or platecheck(plate)
更一般地说,如果你有一个函数列表,你可以使用 any
,short-circuits 就像 or
:
tests = [exclusions, platecheck]
invalid = any(test(plate) for test in tests)
基本上,我的 objective 这样做是为了在枚举之后更容易编写 if 语句,以查看输入字符串是否包含字符串中间的任何数字..如果它包含比到 return True 所以它是无效的......这可能是在主要功能中执行此操作的几个问题但希望有人可以让我知道我是否正在以“智能”方式进行此操作,以及如何实际将其正确实现到主函数中。
import string
def main():
plate = input("Plate: ")
return_val = exclusions(plate)
checkplate = platecheck(plate)
if return_val:
print("Invalid")
else:
print(checkplate)
print("Valid")
def exclusions(s):
new_string = s.translate(
str.maketrans('', '', string.punctuation))
if len(new_string) < len(s):
print("Please do not use punctuation")
return True
elif 2 <= len(new_string) <= 6:
return False
else:
return True
def platecheck(s):
for i, l in (enumerate(s, 1)):
print(l, i) # Some sort of if statement here
main()
就排除功能而言,目前一切正常,确保没有标点符号,并确保输入在 2 到 6 个字符之间。
input/output 正常工作的示例:
输入:
t33st
输出:
Numbers only allowed at the end of the plate
Invalid
当前输出:
t 1
3 2
3 3
s 4
t 5
None
Valid
确定尾部是否为数字的一种简单方法是找到第一个数字并对字符串的其余部分调用 isdigit
:
def platecheck(s):
first = next(i for i, c in enumerate(s), len(s))
return not s[first:].isdigit()
一个更通用的用于检查文本模式的工具称为 regular expressions, which python implements via the re
模块:
plate_pattern = re.compile('\D*\d*')
def platecheck(s):
return not plate_pattern.fullmatch(s)
你可以exclusions
更优雅地写成
def exclusions(s):
if any(c in string.punctuation for c in s):
print("Please do not use punctuation")
return True
return len(s) > 6 or len(s) < 2
因为 True 表示有问题,你应该将你的函数与 or
:
return_val = exclusions(plate) or platecheck(plate)
更一般地说,如果你有一个函数列表,你可以使用 any
,short-circuits 就像 or
:
tests = [exclusions, platecheck]
invalid = any(test(plate) for test in tests)