<p>正确的解决方案将使用<code>or</code>。</p>
<pre><code>string = input("Enter a string: ")
if all(x.isalpha() or x.isspace() for x in string):
print("Only alphabetical letters and spaces: yes")
else:
print("Only alphabetical letters and spaces: no")
</code></pre>
<p>虽然有一个字符串,但您正在对该字符串的字母进行迭代,因此一次只能有一个字母。因此,一个char本身不能是一个字母字符和一个空格,但它只需要是这两个字符中的一个就可以满足您的约束。</p>
<p><strong>编辑:</strong>我在另一个答案中看到了您的评论。<code>alphabet = string.isalpha()</code>返回<code>True</code>,如果且仅当<em>字符串中的所有</em>字符都是字母。这不是您想要的,因为您声明希望您的代码在使用具有空格的字符串<code>please</code>执行时打印<code>yes</code>。你需要自己检查每个字母,而不是整个字符串。</p>
<p>只是为了让您相信代码确实是正确的(好吧,好吧,您需要自己执行它才能让您信服,但是无论如何):</p>
<pre><code>>>> string = "please "
>>> if all(x.isalpha() or x.isspace() for x in string):
print("Only alphabetical letters and spaces: yes")
else:
print("Only alphabetical letters and spaces: no")
Only alphabetical letters and spaces: yes
</code></pre>
<p><strong>编辑2:</strong>根据您的新评论判断,您需要以下内容:</p>
<pre><code>def hasSpaceAndAlpha(string):
return any(char.isalpha() for char in string) and any(char.isspace() for char in string) and all(char.isalpha() or char.isspace() for char in string)
>>> hasSpaceAndAlpha("text# ")
False
>>> hasSpaceAndAlpha("text")
False
>>> hasSpaceAndAlpha("text ")
True
</code></pre>
<p>或者</p>
<pre><code>def hasSpaceAndAlpha(string):
if any(char.isalpha() for char in string) and any(char.isspace() for char in string) and all(char.isalpha() or char.isspace() for char in string):
print("Only alphabetical letters and spaces: yes")
else:
print("Only alphabetical letters and spaces: no")
>>> hasSpaceAndAlpha("text# ")
Only alphabetical letters and spaces: no
>>> hasSpaceAndAlpha("text")
Only alphabetical letters and spaces: no
>>> hasSpaceAndAlpha("text ")
Only alphabetical letters and spaces: yes
</code></pre>