如果没有,我该如何缩短这些代码?

时间:2018-11-18 12:01:58

标签: python python-3.x

 if not (argument1 and argument2 and argument3).isalpha():
    print(("Argument {} {} {} are not a word. All arguments should be word").format(argument1, argument2, argument3))       
if not (argument1.isalpha() and argument2.isalpha() and argument3.isalpha()):
        print(("Argument {} {} {} are not a word. All arguments should be word").format(argument1, argument2, argument3))

第一个代码不起作用,但是第二个代码可以工作,如何像第一个代码一样缩短第二个代码? ,您可以缩短整个代码吗?

if not (argument1.isalpha() and argument2.isalpha() and argument3.isalpha()):
    print(("Argument {} {} {} are not a word. All arguments should be word").format(argument1, argument2, argument3))
elif not (argument1 and argument2).isalpha():
    print(("Argument {} {} are not a word. All arguments should be word").format(argument1, argument2))
elif not (argument1 and argument3).isalpha():
    print(("Argument {} {} are not a word. All arguments should be word").format(argument1, argument3))
elif not (argument2 and argument3).isalpha():
    print(("Argument {} {} are not a word. All arguments should be word").format(argument2, argument3))
elif not argument1.isalpha():
    print(("Argument {} is not a word. All arguments should be word").format(argument1))
elif not argument2.isalpha():
    print(("Argument {} is not a word. All arguments should be word").format(argument2))
elif not argument3.isalpha():
    print(("Argument {} is not a word. All arguments should be word").format(argument3))
else:

它应该继续执行代码

5 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

bad_arguments = []
if not argument1.isalpha():
    bad_arguments.append(argument1)
if not argument2.isalpha():
    bad_arguments.append(argument2)
if not argument3.isalpha():
    bad_arguments.append(argument3)

if len(bad_arguments) == 1:
    print(("Argument {} is not a word. All arguments should be words").format(bad_arguments[0]))
elif len(bad_arguments) > 1:
    print(("Arguments {} are not words. All arguments should be words").format(" ".join(bad_arguments)))
else:
    #all the arguments are words do what you want here

或者如果您的参数在列表中,则可以缩短第一部分:

bad_arguments = []
for argument in arguments:
    if not argument.isalpha():
        bad_arguments.append(argument)

答案 1 :(得分:0)

尝试一下,它也支持整数:

for i in [argument1,argument2,argument3]:
    if not (isinstance(i,str) and i.isalpha()):
        print('{} is not word'.format(i))

请注意,如果您使用的是Python3.6或更高版本,则可以使用新格式的格式化字符串:

print(f'{i} is not word')

答案 2 :(得分:0)

您可以将参数放入列表中,然后检查其中是否不是字母,然后打印出哪些参数不正确。

argument1 = 'abc'
argument2 = 'abc 123'
argument3 = '123'
arguments = [argument1, argument2, argument3]
wrong_args = [not i.isalpha() for i in arguments]

if any(wrong_args):
    print('Arguments {} are not alphabetic'.format(' '.join(str(idx+1) for idx, i in enumerate(wrong_args) if i)))
else:
    print('Your arguments are correct')

答案 3 :(得分:0)

AntiMatterDynamite的答案很好,但是,甚至可以使用列表来完成以下操作:

argument1, argument2, argument3 = "a", "b", "0123"
listOfArgs = [argument1, argument2, argument3]

# get the list of invalid argumetns
listOfInvalidArgs = [arg for arg in listOfArgs if not arg.isalpha()]
# if the list is not empty
if listOfInvalidArgs:
    print("Argument {} is/are not a word(s). All arguments should be words!".format(" ".join(listOfInvalidArgs)))

或更短

if [arg for arg in [argument1, argument2, argument3] if not arg.isalpha()]:
    print("Argument {} is/are not a word(s). All arguments should be word".format(" ".join(listOfInvalidArgs)))

答案 4 :(得分:0)

根据您的代码,您似乎只是在尝试检查某些字符串参数是否不是字母。

简短版本的问题是您没有在字符串上调用isalpha(),而是在字符串之间执行了and。如果仅打印出(argument1 and argument2 and argument3)的结果,就会非常清楚地看到问题。您会注意到结果不是布尔值(如您可能预期的那样),而是最后一个字符串的值。

您实际上是在较长的代码示例中解决此问题的:(argument1.isalpha() and ...而不是整个代码段。

根据您的第二个代码块,您还想确定哪些参数是错误的。尽管您可以针对三个参数执行此操作,但是创建一个更通用的解决方案以便使用任意数量的参数执行此操作会更好。首先,您可以这样做:

def check_alphabetic(*arguments):
    non_alphabetic = []
    for arg in arguments:
        if not arg.isalpha():
            non_alphabetic.append(arg)
    return non_alphabetic

然后您可以简单地检查返回的列表是否为空。如果不是,则可以使用列表中的所有参数打印消息。

可以通过使用列表理解来进一步缩短:

# assuming arguments is a list
non_alphabetic = [arg for arg in arguments if not arg.isalpha()]