这个检查器工作得很完美,但是我有一种强烈的感觉,我可以让这个脚本更符合“Python的禅”,特别是最近读了一本关于它的书。毫无疑问,我把这个脚本写得比需要的长得多,所以如果你看到一些我可以缩短的东西,请说出来。
#!/usr/bin/env python
myPhrase = "The quick brown fox jumps over the lazy dog"
def is_pangram(phrase):
c = 0
alphabet = "abcdefghijklmnopqrstuvwxyz"
phraseLetters = ""
for char in phrase:
for letter in alphabet:
if char == letter and char not in phraseLetters:
phraseLetters += char
for char in phraseLetters:
for letter in alphabet:
if char == letter:
c += 1
if c == 26:
return True
else:
print phraseLetters, alphabet
return False
print is_pangram(myPhrase)
发布于 2015-03-14 00:46:36
这是可以改进的,使更多的毕达通。首先,有in
和not in
关键字,您在使用它时已经知道了这个关键字。为什么不利用它而不是做两个循环呢?
您必须稍微改变逻辑:
def is_pangram(phrase):
alphabet = "abcdefghijklmnopqrstuvwxyz"
phraseLetters = ""
for char in phrase:
if char in alphabet:
phraseLetters += char
for char in alphabet:
if char not in phrase:
print phraseLetters, alphabet
return False
return True
我在phrase
中迭代这些字母,检查它们是否在字母表中,并将它们添加到phraseLetters
字符串中。然后,我遍历字母表并检查每个字符是否在phrase
中。
如果您对打印短语中的字母不感兴趣,这可以进一步简化。我建议进一步削减:
def is_pangram(phrase):
alphabet = "abcdefghijklmnopqrstuvwxyz"
for char in alphabet:
if char not in phrase:
return False
return True
这样,您就可以检查短语是否为pangram,而不必总是打印到屏幕上,这对以后重用代码很有好处;然后可以编写另一种方法来打印短语和字母表中的字符串。此外,我建议按字母顺序打印phrase
中的字母,这样就可以很容易地看出哪个字母不在phrase
中,这也将使您必须进行的任何潜在调试更加容易。
感谢评论中的matsjoyce,您可以进一步简化它:
def is_pangram(phrase):
alphabet = "abcdefghijklmnopqrstuvwxyz"
return not (set(alphabet) - set(phrase))
通过这种方式,您甚至可以通过删除phrase
关键字来返回不在not
中的字母,以便于引用,但是您还必须更改方法的名称,因为is_something
意味着返回一个布尔值。
此外,您可能应该在所有大写中命名alphabet
,以表示它是一个常量变量。
发布于 2015-03-14 00:46:16
我们要检查这个短语是否包含字母表中的所有字母。这种措辞或多或少地暗示了您的代码组织。
让我们将目标重写为等价的:检查字母表中的每个字母是否都在短语中。或者,更简单的说,字母表中没有遗漏任何字母。这种措辞立即导致了更为简单的做法:
for letter in alphabet:
if not letter in phrase:
return False
return True
发布于 2015-03-14 12:14:30
我会让固定班来做所有的工作。
english_alphabet = frozenset('abcdefghijklmnopqrstuvwxyz')
def is_pangram(phrase, alphabet=english_alphabet):
if not isinstance(alphabet, (set, frozenset)): alphabet = set(alphabet)
return alphabet <= set(x.lower())
集合的使用也自然允许您打印短语中没有的字母。
>>> phrase="The quick red fox jumps over the lazy dog"
>>> sorted(english_alphabet - set(phrase.lower()))
['b', 'n', 'w']
https://codereview.stackexchange.com/questions/84051
复制相似问题