Python ASCII字符计数

Python ASCII字符计数,python,ascii,Python,Ascii,我必须用Python编写一个程序,提示用户输入文本,然后用嵌套循环将该文本与ASCII字符串(所有ASCII字符)进行比较 ascii_string= """!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~""" user_text=input("Enter a text to analyze: ") for character

我必须用Python编写一个程序,提示用户输入文本,然后用嵌套循环将该文本与ASCII字符串(所有ASCII字符)进行比较

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

user_text=input("Enter a text to analyze: ")

for character in (user_text):
    total_count= len(user_text)
    for user_text in (ascii_string):
        ascii_count=len(user_text)

print("Total number of characters: ", total_count)
print("Total number of ASCII characters: ", ascii_count)
print("Total number of non-ASCII characters: ", total_count-ascii_count)
ascii_string=“”!“#$%&\'()*+,-./0123456789:@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^`ABCDEFGHIJKLMNOPQRSTUVWXYZ{124;}~”
用户\文本=输入(“输入要分析的文本:”)
对于中的字符(用户\文本):
总计数=长度(用户文本)
对于用户文本(ascii字符串):
ascii\u count=len(用户\u文本)
打印(“字符总数:”,总计数)
打印(“ASCII字符总数:”,ASCII_计数)
打印(“非ASCII字符总数:”,总计数-ASCII计数)

是的,您确实使用了不合适的算法。对于输入字符串中的每个字符,您保存了整个输入字符串的长度,然后查看ASCII字符串中的每个字符并保存了整个输入字符串的长度。再次

相反,通过将生成器传递给
sum()
,将“is in the ASCII string”的所有布尔值相加,这将相加所有这些布尔值(
True
is
1
False
is
0
):

ascii\u string=set(“!”、-./0123456789:;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^ ` abcdefghijklmnopqrstuvxyz{124;}~”)
用户\文本=输入(“输入要分析的文本:”)
总计数=长度(用户文本)
ascii\u计数=总和(用户文本中c的ascii\u字符串中的c)
打印(“字符总数:”,总计数)
打印(“ASCII字符总数:”,ASCII_计数)
打印(“非ASCII字符总数:”,总计数-ASCII计数)

是的,您确实使用了不合适的算法。对于输入字符串中的每个字符,保存整个输入字符串的长度,然后查看ASCII字符串中的每个字符并保存整个输入字符串的长度。再说一遍

相反,通过将生成器传递给
sum()
,将“is in the ASCII string”的所有布尔值相加,这将相加所有这些布尔值(
True
is
1
False
is
0
):

ascii\u string=set(“!”、-./0123456789:;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^ ` abcdefghijklmnopqrstuvxyz{124;}~”)
用户\文本=输入(“输入要分析的文本:”)
总计数=长度(用户文本)
ascii\u计数=总和(用户文本中c的ascii\u字符串中的c)
打印(“字符总数:”,总计数)
打印(“ASCII字符总数:”,ASCII_计数)
打印(“非ASCII字符总数:”,总计数-ASCII计数)

更好、更简单、更快的方法:


>>>s=“asdmlfjkèè&-è”
>>>ascii_count=len(s.encode(“ascii”、“忽略”))
>>>ascii_计数
12

更好、更简单、更快的方法:


>>>s=“asdmlfjkèè&-è”
>>>ascii_count=len(s.encode(“ascii”、“忽略”))
>>>ascii_计数
12

您能给出一个示例输入和一个示例输出吗?这是程序运行的示例。输入要分析的文本:让我们去咖啡馆!字符总数:18 ASCII字符总数:16非ASCII字符总数:2您能给出一个示例输入和示例输出吗?这是一个示例ru程序的nning。输入要分析的文本:让我们去咖啡馆吧!字符总数:18个ASCII字符总数:16个非ASCII字符总数:2我也将
ASCII\u字符串
转换为
,因为我们只测试成员资格。不管怎样,它都是唯一的字符,所以我们所获得的只是以创建哈希表为代价的更快的查找(我想?不确定)。我想性能的提高(如果有的话)取决于用户输入字符串的大小。看起来确实更快。如果我们需要进行数千或数百万的成员资格测试,
ascii_string=set(ascii_string)
将是一个很好的优化。@dursk-为您将其更改为
。我也将
ascii_字符串
转换为
,因为我们只测试成员资格。好吧,反正都是唯一字符,所以我们得到的只是更快的查找(我想?不确定)以创建哈希表为代价。我想性能的提高(如果有的话)取决于用户输入字符串的大小。看起来确实更快。如果我们需要进行数千或数百万次成员资格测试,
ascii\u string=set(ascii\u string)
将是一个很好的优化。@dursk-为您将其更改为
set
ascii_string = set("""!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~""")

user_text = input("Enter a text to analyze: ")

total_count = len(user_text)
ascii_count = sum(c in ascii_string for c in user_text)

print("Total number of characters:", total_count)
print("Total number of ASCII characters:", ascii_count)
print("Total number of non-ASCII characters:", total_count-ascii_count)