Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查字符串的所有字符是否都是大写_Python_String_Uppercase - Fatal编程技术网

Python 检查字符串的所有字符是否都是大写

Python 检查字符串的所有字符是否都是大写,python,string,uppercase,Python,String,Uppercase,假设我有一个可以包含不同字符的字符串: e、 g.word=“大写” 如何测试字符串以确定所有字符是否都是大写,是否没有其他标点符号、数字、小写字母等?您可以使用正则表达式: all_uppercase = bool(re.match(r'[A-Z]+$', word)) 你应该使用和功能 例如 根据文件: 如果S中的所有大小写字符都是大写且至少有个字符,则返回True S中至少有一个大小写字符,否则为False 对于这个问题有最好的答案,但如果您也想知道如何在没有方法的情况下检查,纯粹出于教

假设我有一个可以包含不同字符的字符串:

e、 g.
word=“大写”


如何测试字符串以确定所有字符是否都是大写,是否没有其他标点符号、数字、小写字母等?

您可以使用正则表达式:

all_uppercase = bool(re.match(r'[A-Z]+$', word))
你应该使用和功能

例如

根据文件:

如果
S
中的所有大小写字符都是大写且至少有个字符,则返回
True
S
中至少有一个大小写字符,否则为
False

对于这个问题有最好的答案,但如果您也想知道如何在没有方法的情况下检查,纯粹出于教育原因:

import string

def is_all_uppercase(a_str):
    for c in a_str:
        if c not in string.ascii_uppercase:
            return False
    return True

您也可以在字符级别工作

以下功能不仅适用于单词,也适用于短语:

def up(string):
    upper=[ch for ch in string if ch.isupper() or ch.isspace()]
    if len(upper)==len(string):
        print('all upper')
    else:
        print("some character(s) not upper")

strings=['UPPERCAS!', 'UPPERCASe', 'UPPERCASE', 'MORE UPPERCASES']
for s in strings:
   up(s)
Out: some character(s) not upper 
Out: some character(s) not upper
Out: all upper
Out: all upper

在这里,您可以找到一种非常有用的方法来检查字符串中是否至少有一个大写或小写字母

下面是我在这个链接中发现的一个简单示例:

print(any(l.isupper() for l in palabra))

使用Diogo Martins采用的相同方法,但使用
all()
和生成器作为
for/if/return
构造的替代方案,以获得更优雅、更具Python风格的解决方案:

导入字符串
is_all_uppercase=all(字符串中的c.ascii_大写表示单词中的c)
它通过只测试每个字符一次来避免对字符串进行两次扫描,并且在第一个失败的字符上短路

或者,为了进一步优化它:

upper=set('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
is_all_大写=all(大写c表示单词中的c)
但是,对于常见的输入,它的性能并不比公认的解决方案word.isalpha()和word.isupper()好:通过使用C编译的内置方法,即使它扫描字符串两次,也比任何纯python解决方案都好:

$ python3 -m timeit -s 'word="UPPER£CASe"; upper=set("ABCDEFGHIJKLMNOPQRSTUWXYZ")' -- \
'all(c in upper for c in word)'
1000000 loops, best of 3: 0.514 usec per loop

$ python3 -m timeit -s 'word="UPPER£CASe"' -- 'word.isupper() and word.isalpha()'
10000000 loops, best of 3: 0.0446 usec per loop
请注意,
str.isupper()和str.isalpha()
包括Unicode字符,如希腊语、西里尔语(“俄语”)、阿拉伯语等,只要它们是大写;-)


例如,如果它包含一个数字或标点符号,也会显示True。我需要它,所以它只是大写字母(A-Z)。谢谢。例如,如果它包含数字或标点符号,这也会显示为真。我需要它,所以它只是大写字母(A-Z)。ThanksBe意识到这并不局限于ASCII字符,例如,它将允许大写希腊文和西里尔文。这可能是您想要的,也可能不是您想要的。这会为“ΓΔΞΞ∏Φψψ铹铹ЙЛ”生成
True
,因此请小心。嗯,它们是大写字母。。这是一个在每一步都非常低效的代码:如果你真的想使用字符级的方法,而不是使用
len()
测试的列表理解,即使第一个失败也不需要测试所有字符,那么使用
any()
/
all()的生成器表达式
因此它会在第一个出现故障的字符上短路。
print(any(l.isupper() for l in palabra))
$ python3 -m timeit -s 'word="UPPER£CASe"; upper=set("ABCDEFGHIJKLMNOPQRSTUWXYZ")' -- \
'all(c in upper for c in word)'
1000000 loops, best of 3: 0.514 usec per loop

$ python3 -m timeit -s 'word="UPPER£CASe"' -- 'word.isupper() and word.isalpha()'
10000000 loops, best of 3: 0.0446 usec per loop
>>> word = "ΓΔΘΞΠΦΨΩБГДЖЙЛ"; word.isupper() and word.isalpha()
True