我有一个问题,我解决了两种不同的方式,我想知道哪个更好,更干净,更容易阅读。
问题:编写一个while循环,从字符串中的最后一个字符开始,返回到字符串中的第一个字符,将每个字母打印在单独的一行上。
示例1:
char = 'Wednesday'
cont = -1
cont2 = len(char)
cont3 = len(char) + 1
while cont < cont2:
print(char[cont2:cont3])
cont2 = cont2 - 1
cont3 = cont3 - 1
示例2:
char = 'Wednesday'
cont = len(char) - 1
while cont >= 0:
cont2 = char[cont]
print(cont2)
cont -= 1
发布于 2020-09-06 19:16:15
同时查看这两个实现,忽略练习和替代实现的目标,我认为第二个示例更好:
对于类似这样的简单问题,将解决方案的复杂性看作写下它所必需的“标记”或不同的语言元素的数量通常是有用的。例如,print(cont2)
是四个令牌:print
、(
、cont2
和)
。通过快速阅读,第一个示例的标记数量大约是第二个示例的两倍。
发布于 2020-09-06 20:13:47
代码越短,越好(只要它不陷入使代码混乱的极端状态)。因此,第二个解决方案更好--使用较少的行和变量来实现相同的目标。
这里有一个小小的吹毛求疵,听起来像是对这个简单任务的过度反应的建议,但是每一个大规模的代码库都是以简单的方式开始的:使用更好的变量名称。
char
通常是对单个字符的引用,但是在您的示例中,它是整个字符串,这可能有点令人困惑。cont
是什么的缩写?发布于 2020-09-07 10:04:14
当然,第二个答案更好,但这两个答案都不像一个流利的Python程序员会编写的代码。
说明:两个答案都没有充分利用字符串是序列的事实,就像列表和元组一样。除其他外,这意味着字符串可以直接迭代。
word = 'Wednesday'
# No: too much red tape.
for i in range(len(word)):
print(word[i])
# Yes: nice and simple.
for char in word:
print(char)
除了可直接迭代之外,序列是可排序的和可逆式的。
for char in reversed(word):
print(char)
甚至:
print('\n'.join(reversed(word)))
而且你绝对必须使用一个while
循环,也许这会奏效。是的,这是愚蠢的,但它仍然比按索引访问字符串中的字符的官僚作风更简单、更容易理解。
while True:
print('\n'.join(reversed(word)))
break
https://codereview.stackexchange.com/questions/249015
复制相似问题