我试图摆脱使用if / else的坏习惯。我不熟悉函数的工作方式以及调用它们的正确方法,但是我一直在研究用我的代码实现它们的正确方法。我正在编写的代码假设要检查3个不同的单词,如果该单词不在输入中,则用户将收到一条语句,显示“拒绝”,如果单词正确,它将显示“已接受”。我面临的问题是使程序正常运行。到目前为止,我已经设置了程序来检查单词的每个索引,如果它与完整单词匹配,它将被标记为已接受。我正在尝试找出添加拒绝标志的正确方法,并避免运行此程序后收到的错误。
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()
对于这个程序,我不会使用字典,因此我可以正确地挑战自己,并以自动方式实现它。如何在不使字符串索引超出范围错误的情况下实现此代码。我试图在我的打印声明后加上中断,但它不起作用。
预先感谢大家。这是我的第一篇文章,所以如果我在文章中有任何错误,请告诉我!
答案 0 :(得分:1)
这是为您提供可扩展的一线服务:
def check():
q = input().strip()
acceptable = {'if', 'else', 'do'}
print('accepted' if q in acceptable else 'rejected')
变量acceptable
是set
;一个数据结构,可以非常快速地检查其中是否包含某些内容。您可以修改此集合(或将其作为参数传递给check
!)来更改可接受字的范围,而无需更改程序的控制流(就像您在原始if / else实现中所做的那样)值得称赞的是要远离。)
编辑:我想这并不是严格意义上的“单线” ...
答案 1 :(得分:0)
首先,为什么要访问输入字符串的每个字符,然后再次将它们连接起来,然后与目标字符串(“ if”,“ else”,“ do”)进行比较?
第二,如果匹配其中任一语句会导致相同的结果(if
,为什么还要重复使用print("accepted")
语句?
尝试一下:
def checker():
q0 = input("enter word:")
if q0 in ["if", "else", "do"]:
print("accepted")
else:
print("rejected")
checker()
现在,您只需将字符串q0
与另一个字符串(列表[“ if”,“ else”,“ do”]的每个元素)进行比较。另外,列表中的第一个匹配项将停止比较,并继续打印“已接受”。
++只是为了让您知道为什么看到“索引超出范围错误”,您正在访问q0
的每个字符,却不知道有多少个字符。因此,如果用户输入类似a
的字符串,则不会有q0[1]
或q0[2]
,但是您是在要求程序访问它。因此索引超出范围错误。
答案 2 :(得分:0)
您可以使用for循环和一个if语句来执行此操作,如果这样更适合您。只需将所有可接受的值放入列表中,然后检查每个单词是否在q0中即可。
def checker():
q0 = input('enter word:')
for i in ['if', 'else', 'do']:
result = ('accepted' if i in q0 else 'rejected')
if result == 'accepted':
break
print(result)
答案 3 :(得分:0)
您可以将其作为具有lambda功能的衬纸来完成。
checker = lambda q: print("accepted" if q in ["elif", "if", "else"] else "rejected")
checker()
这是一个样本
>>> checker = lambda q: print("accepted" if q in ["elif", "if", "else"] else
"rejected")
>>> checker("if")
accepted
>>> checker("fool")
rejected