如果下面的代码必须重新构造才能使用一个if-elif块,哪个更好? 1还是2?

A = int(input("Enter an integer(1~30): "))if A % 6 == 0:
print("A is even")
print("A is even and a multiple of 6 (6, 12, 18, 24, 30).")
elif A % 10 == 0:
print("A is even")
print("A is even and a multiple of 10 (10, 20).")
elif A % 2 == 0:
print("A is even")
print("A is even and a number out of 2, 4, 8, 14, 16, 22, 26, 28.")
elif A % 3 == 0:
print("A is odd")
print("A is odd and a multiple of 3 (3, 9, 15, 21, 27).")
else:
print("A is odd")
print("A is 1 or a number out of 1, 5, 7, 11, 13, 17, 19, 23, 25, 29.")if A % 2 == 0 and A % 3 == 0:
print("A is even")
print("A is even and a multiple of 6 (6, 12, 18, 24, 30).")
elif A % 2 == 0 and A % 5 == 0:
print("A is even")
print("A is even and a multiple of 10 (10, 20).")
elif A % 2 == 0 and A % 3 != 0 and A % 5 != 0:
print("A is even")
print("A is even and a number out of 2, 4, 8, 14, 16, 22, 26, 28.")
elif A % 2 != 0 and A % 3 == 0:
print("A is odd")
print("A is odd and a multiple of 3 (3, 9, 15, 21, 27).")
else:
print("A is odd")
print("A is 1 or a number out of 1, 5, 7, 11, 13, 17, 19, 23, 25, 29.")这是学校作业中问题的一部分,问题是如何将一些代码重新格式化为
if
…
elif
…
elif
…
else
…显然有更好的结构可以避免将print("A is even")乘以,但问题是在上面的结构中格式化它。
那么,如果以上两种选择是唯一更好的选择,为什么呢?
发布于 2020-09-23 06:46:12
首先,重要的事实是:你需要将一段合理的代码重构成一个邪恶的代码。如果-埃利夫-其他-耙很少是最好的解决方案。那就是说我会试着给出两条一般规则。
测试"a multiple of 6 (6, 12, 18, 24, 30)"时
if A % 6 == 0:是否与以下方法相比,可读性更强、容易出错的解决方案
if A % 2 == 0 and A % 3 == 0:写好代码并不是为了炫耀数学知识。
当我们做一个if-elif
if a:
...
elif not a and b:
...
elif not a and not b and c:
...
elif not a and not b and not c and d:
...我们有
if a:
...
elif b:
...
elif c:
...
elif d:
...not条件是隐式的。原因同样是可读性、简单性,从而减少了出错的可能性。可维护性很重要,请考虑稍后插入一个子句。它还避免了对测试的多重评估。
因此,您的第一个代码示例不那么邪恶,因为没有代码重复和更好的可读性。
发布于 2020-09-23 04:15:29
以下是更好的海事组织。输出中省略了重复的"A is odd“/ "A is even”字符串。如果需要,可以添加它们。
if A % 2 == 0:
if A % 6 == 0:
msg = "a multiple of 6 (6, 12, 18, 24, 30)"
elif A % 10 == 0:
msg = "a multiple of 10 (10, 20)"
else:
msg = "a number out of 2, 4, 8, 14, 16, 22, 26, 28"
print(f"A is even and {msg}.")
else:
if A % 3 == 0:
msg = "a multiple of 3 (3, 9, 15, 21, 27)"
else:
msg = "a number out of 1, 5, 7, 11, 13, 17, 19, 23, 25, 29"
print(f"A is odd and {msg}.")至于提供的代码的哪一个版本更好,我同意@stefan的回答。
https://codereview.stackexchange.com/questions/249714
复制相似问题