for 语句中的 if 语句仅输出 else 部分的打印语句,即使 if 和 elif 部分满足条件

If statement within for statement is only outputting the print statement of the else portion even though conditions met in if and elif parts

我试图在 for 循环中将 if/else 语句获取到 运行。尽管参数满足其上方所有语句的条件,但输出是 else 部分。这是我的代码:

import string

print(string.ascii_lowercase)
print(string.ascii_uppercase)
print(string.ascii_letters)
print(string.digits)
print(string.punctuation)

my_string = '4n%$P9'
  
for index in range(0, len(my_string), 1):
  if my_string in string.ascii_lowercase:
    print("'{}' is a lowercase letter.".format(my_string))
  elif my_string in string.ascii_uppercase:
    print("'{}' is an uppercase letter.".format(my_string))
  elif my_string in string.digits: 
    print("'{}' is a digit in arabic.".format(my_string))
  elif my_string in string.punctuation:
    print("'{}' is a punctuation mark.".format(my_string))
  else:
    print("Does not compute.")

输出是这样的:

abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Does not compute.
Does not compute.
Does not compute.
Does not compute.
Does not compute.
Does not compute.

我没有收到语法错误,所以我想知道,我是否没有使用正确的关键字?逻辑有问题吗?

您正在尝试比较整个字符串是否在 string.ascii_lowercase 中,而不仅仅是字母,您实际上需要 运行 my_string[index].

import string

print(string.ascii_lowercase)
print(string.ascii_uppercase)
print(string.ascii_letters)
print(string.digits)
print(string.punctuation)

my_string = '4n%$P9'
  
for index in range(0, len(my_string), 1):
  if my_string[index] in string.ascii_lowercase:
    print("'{}' is a lowercase letter.".format(my_string[index]))
  elif my_string[index] in string.ascii_uppercase:
    print("'{}' is an uppercase letter.".format(my_string[index]))
  elif my_string[index] in string.digits: 
    print("'{}' is a digit in arabic.".format(my_string[index]))
  elif my_string[index] in string.punctuation:
    print("'{}' is a punctuation mark.".format(my_string[index]))
  else:
    print("Does not compute.")

问题不在于 if 语句,而在于 for 循环。看起来您想遍历 my_string 中的每个字符并单独测试,而不是一次测试 my_string

for c in my_string:
    if c in string.ascii_lowercase:
        print(f"'{c}' is a lowercase letter.")
    elif c in string.ascii_uppercase:
        print(f"'{c}' is an uppercase letter.")
    elif c in string.digits: 
        print(f"'{c}' is a digit in arabic.")
    elif c in string.punctuation:
        print(f"'{c}' is a punctuation mark.")
    else:
        print(f"'{c}' does not compute.")

打印:

'4' is a digit in arabic.
'n' is a lowercase letter.
'%' is a punctuation mark.
'$' is a punctuation mark.
'P' is an uppercase letter.
'9' is a digit in arabic.

请注意,打印 c 作为“不计算”消息的一部分可以让您看到哪个字符没有计算——如果您在原始代码中使用 my_string 完成了此操作,你会看到:

'4n%$P9' does not compute.
'4n%$P9' does not compute.
'4n%$P9' does not compute.
'4n%$P9' does not compute.
'4n%$P9' does not compute.
'4n%$P9' does not compute.

这将是问题所在的一个很好的线索!

您正在检查整个字符串是否是 string 模块中每个常量的子字符串。您要对字符串中的 每个字符 执行该检查,如下所示:

import string

my_string = '4n%$P9'
  
for char in my_string:
  if char in string.ascii_lowercase:
    print("'{}' is a lowercase letter.".format(char))
  elif char in string.ascii_uppercase:
    print("'{}' is an uppercase letter.".format(char))
  elif char in string.digits: 
    print("'{}' is a digit in arabic.".format(char))
  elif char in string.punctuation:
    print("'{}' is a punctuation mark.".format(char))
  else:
    print("Does not compute.")

这输出:

'4' is a digit in arabic.
'n' is a lowercase letter.
'%' is a punctuation mark.
'$' is a punctuation mark.
'P' is an uppercase letter.
'9' is a digit in arabic.