首页 > 解决方案 > 使用 if 语句的最佳替代方法?

问题描述

我正在努力改掉过于频繁地使用 if/else 的坏习惯。我对函数的工作方式和调用它们的正确方法不熟悉,但我一直在研究用我的代码实现它们的正确方法。我正在制作的代码是假设检查 3 个不同的单词,如果该单词不在输入中,那么用户将收到一条语句,上面写着“rejected”,如果这个词是正确的,它会说“accepted”。我面临的问题是让我的程序正常工作。到目前为止,我已经设置了我的程序来检查单词的每个索引,如果它与完整的单词匹配,它将被标记为已接受。我试图找出添加拒绝标志的正确方法,并避免在运行该程序后收到错误。

def checker():
  q0 = input("enter word:")
  if (q0[0]) +(q0[1]) == "if":
    print ("accepted")
  if (q0[0]) + (q0[1]) + (q0[2]) + q0[3] == "else": 
    print("accepted")
  if(q0[0]) + (q0[1]) == "do":
    print("accepted")
  else:
    print("rejected")
checker()

对于这个程序,我不会使用字典,所以我可以正确地挑战自己并以自动机的方式实现它。如何在不出现字符串索引超出范围错误的情况下实现此代码。我试图在我的 print 语句之后加上 break,但它不起作用。

在此先感谢大家。这是我的第一篇文章,所以如果我在我的帖子中犯了任何错误,请告诉我!

标签: pythonpython-3.xautomata

解决方案


这是一个可扩展的单线:

def check():
    q = input().strip()
    acceptable = {'if', 'else', 'do'}
    print('accepted' if q in acceptable else 'rejected')

变量acceptableset; 一种数据结构,可以非常快速地检查其中是否有东西。您可以修改此集合(或将其check作为参数传递!)以更改可接受单词的范围而不更改程序的控制流(就像您在原始的 if/else 实现中所做的那样,您值得称赞的是要移开从)。

编辑:我想这不是严格意义上的“单线”......


推荐阅读