这是我的代码。它似乎只检查第一个字符。我想知道如何解决它。
import string
ASCII_LOWERCASE = "abcdefghijklmnopqrstuvwxyz"
ASCII_UPPERCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
DECIMAL_DIGITS = "0123456789"
ALPHABETS = ASCII_LOWERCASE + ASCII_UPPERCASE
def is_alpha(string):
for c in "string":
if c in ALPHABETS:
return False
else:
return True
答案 0 :(得分:2)
不要在每次迭代中返回,只有在找到不在ALPHABET中的内容时才返回False。那怎么样?
GET /0 HTTP/1.1\r\nHost: www.baidu.com\r\nConnection: close\r\n\r\n
GET /0 HTTP/1.1\r\nHost: www.baidu.com\r\nConnection: close\r\n\r\n
GET /0 HTTP/1.1\r\nHost: www.baidu.com\r\nConnection: close\r\n\r\n
答案 1 :(得分:1)
这里的代码有几个问题。 在你的函数定义中你要说
for c in "string"
表示您正在检查字符串文字“string”中的字符。 您需要删除引号以使其引用您的参数并实际检查您正在查看的字符串。此外,您应该将参数和变量的名称更改为比字符串更不明确的名称。
正如Two-Bit Alchemist指出的那样,你是从循环内部返回的,所以如果第一个字符在ALPHABETS中,那么它将返回并且不再执行。
哪个是最后一期。如果它是alpha字符而不是true,则返回False。如果你改变了
if c in ALPHABETS:
return False
到
if c not in ALPHABETS:
return False
然后删除else分支并在循环后返回True,它将按预期工作。
答案 2 :(得分:1)
实际上几乎是一半的权利:
def is_alpha(string):
for c in string:
if not c in ALPHABETS:
return False
return True
False短路是可以的,但你需要完成循环以确定True
答案 3 :(得分:0)
像这样更改你的功能:
def is_alpha(string):
for c in string:
if c not in ALPHABETS:
return False
return True
首先,您的代码中有for c in "string":
。你在那里创建一个新的字符串("字符串")并循环遍历其中的字符。相反,您希望循环传递给函数的参数。所以删除双引号。
您的函数在第一个字符后返回,因为您在两种情况下都返回。仅当所有字符都在ALPHABETS