python - 如果是字母数字则返回 True(不允许方法或导入)

标签 python if-statement python-3.x while-loop boolean

当且仅当输入的是字母数字(仅包含字母或数字)而不使用方法或导入时,使函数返回 True 的好方法是什么?

到目前为止,在类里面,我们只介绍了boolswhile 循环和if 语句,并且只允许使用我们的内容学习了。

这是我得到的

def alphanumeric(s):
    i = 0
    while i < len(s):
        if s[i] == 1 or s[i] == 2 or s[i] == 3.....:
            i = i + 1
            return True
        else:
            return False

有没有不使用方法或导入的更简洁的方法? 我所拥有的不起作用,无论我输入什么都返回 False。

已解决。感谢所有提供帮助的人!

最佳答案

您误解了==or 的工作原理。您需要分别测试每个字符:

if s[i] == 1 or s[i] == 2 or s[i] == 3 ...:

或使用 in 测试:

if s[i] in (1, 2, 3, 4, ...):

除非你在这里测试字符,而不是整数,所以要么把你的字符变成一个整数,要么测试数字:

if int(s[i]) in (1, 2, 3, 4, ...):

if s[i] in '1234567890':

后者之所以有效,是因为字符串也是序列;测试一个字符是否在字符串 '1234567890' 中也是一种有效的成员资格测试。

因为字符串是序列,你也可以直接循环遍历它们:

for char in s:
    if char in '1234567890':

无需使用 while 循环和计数器。

这仍然只测试数字;要同时测试字母,您可以执行以下两项操作之一:

  • 使用string模块,它有ascii_lettersdigits属性:

    import string
    
    for char in s:
        if char in string.ascii_letters + string.digits:
    
  • 或者测试字符是否在两个已知字符之间:

    if 'a' <= char <= 'z' or 'A' <= char <= 'Z' or '0' <= char <= '9':
    

    这是可行的,因为字符串是可比较和可排序的;它们根据它们在 ASCII 码表中的位置变小或变大。

您的下一个问题是您返回 True 太早了;您为第一场比赛执行此操作,但您需要测试所有 字符。如果您没有发现任何遗漏,则只返回 True:

for char in s:
    if char not in string.ascii_letters + string.digits:
        return False

return True

现在我们测试所有字符,为第一个不是字母数字的字符返回 False,但只有当循环完成时,我们才返回 True

关于python - 如果是字母数字则返回 True(不允许方法或导入),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16994328/

相关文章:

python - 如何使用 Panda 将 JSON 字符串中的所有元素输出到表中

python - 使用 subprocess.Popen 将输出从 Mathematica 脚本重定向到 PIPE 而不是 stdout 会产生空字符串

iphone - 如何在 iPhone 上使用 python api?

bash - 在 bash 管道中,将上一个命令的输出作为下一个命令的变量(例如 if 语句)

python - 如何隐藏带星号的单词中的字母?

python - 如何匹配 2 个数据框中的电子邮件地址

python - 找到给定函数值的参数的最佳值

python - Django 中的多个参数 URL

javascript - 仅在桌面版本上使 js 代码异步

iphone - if 语句推送到 els 上的 viewController 不起作用