首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果elif…的话,更好的做法是其他陈述?

如果elif…的话,更好的做法是其他陈述?
EN

Code Review用户
提问于 2020-09-23 04:01:25
回答 2查看 812关注 0票数 0

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

代码语言:javascript
复制
A = int(input("Enter an integer(1~30): "))
代码语言:javascript
复制
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.")
代码语言:javascript
复制
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.")

这是学校作业中问题的一部分,问题是如何将一些代码重新格式化为

代码语言:javascript
复制
if
    …
elif
    …
elif
    …
else
    …

显然有更好的结构可以避免将print("A is even")乘以,但问题是在上面的结构中格式化它。

那么,如果以上两种选择是唯一更好的选择,为什么呢?

EN

回答 2

Code Review用户

回答已采纳

发布于 2020-09-23 06:46:12

首先,重要的事实是:你需要将一段合理的代码重构成一个邪恶的代码。如果-埃利夫-其他-耙很少是最好的解决方案。那就是说我会试着给出两条一般规则。

测试"a multiple of 6 (6, 12, 18, 24, 30)"

代码语言:javascript
复制
if A % 6 == 0:

是否与以下方法相比,可读性更强、容易出错的解决方案

代码语言:javascript
复制
if A % 2 == 0 and A % 3 == 0:

写好代码并不是为了炫耀数学知识。

当我们做一个if-elif

代码语言:javascript
复制
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:
    ...

我们有

代码语言:javascript
复制
if a:
    ...
elif b:
    ...
elif c:
    ...
elif d:
    ...

not条件是隐式的。原因同样是可读性、简单性,从而减少了出错的可能性。可维护性很重要,请考虑稍后插入一个子句。它还避免了对测试的多重评估。

因此,您的第一个代码示例不那么邪恶,因为没有代码重复和更好的可读性。

票数 1
EN

Code Review用户

发布于 2020-09-23 04:15:29

以下是更好的海事组织。输出中省略了重复的"A is odd“/ "A is even”字符串。如果需要,可以添加它们。

代码语言:javascript
复制
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的回答。

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/249714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档