我接受两个字符串word1
和word2
,通过命令行只包含字母。
check_conditions
函数将确保字符串仅用于字母。
当我以python myprogram.py 'word1' 'word2'
运行此程序时,它不显示任何内容,没有错误,没有输出。
当我在不使用课程的情况下运行此程序时,它可以作为例外工作。
class FindWinner:
def __init__(self, word1, word2):
self.word1 = word1
self.word2 = word2
def check_conditions(self):
special_chars = set('[~!@#$%^&*.-()_+{}":;01234567989\']+$')
if special_chars.intersection(self.word1) or special_chars.intersection(self.word1) or (len(self.word1) != len(self.word2)
or ('no' in self.word1) or ('no' in self.word2)):
print('Invalid string.')
else:
print("String is valid")
print(list(self.word1))
print(list(self.word2))
def main():
parser = argparse.ArgumentParser()
parser.add_argument("word1", help="First word")
parser.add_argument("word2", help="Second word")
args = parser.parse_args()
c1 = FindWinner(args.number1, args.number2)
c1.check_conditions()
我在这里缺少什么?
修改的
我错过了致电main()
if __name__ == "__main__":
main()
现在,我收到了另一个错误:
if special_chars.intersection(self.word1) or special_chars.intersection(self.word1) or (len(self.word1) != len(self.word2)
or ('no' in self.word1) or ('no' in self.word2)):
当我运行python myprogram.py my_string my_long_string
时,它会给我string is valid
输出(否则为part)。根据上述条件,两个字符串不应包含任何特殊字符和字符串。 len应该是相同的。
答案 0 :(得分:3)
您应该从代码中调用main函数,因为您只定义了它而不是它。通过在代码底部添加以下行来完成此操作的常用方法。
if __name__ == '__main__':
main()
答案 1 :(得分:0)
要解释@ sdvd的答案,行
if __name__ == “__main__”:
main()
检查解释器是直接调用脚本还是导入脚本。如果正在导入脚本,则不会运行main函数,因为您可能不希望立即运行该脚本。如果解释器直接调用脚本,则需要立即运行main函数,即当该表达式求值为true时会发生这种情况。
现在在你的脚本中,没有调用main函数,所以没有任何反应。将上面的行添加到脚本的底部,事情应该按照您的需要进行。
要访问您的参数,请使用args.word1
和args.word2
代替args.number1
和args.number2
,因为这就是您为其命名的内容。
答案 2 :(得分:0)
您将参数命名为一件事,稍后再使用其他名称。
尝试使用args.word1
和args.word2
,或在添加时number1
和number2
调用它们(使用add_argument
)。