一:英文字符频率统计。编写一个程序,对给定字符串中出现的a到z字母频率进行分析,忽略大小写采用降序方式输出
from collections import Counter
import string
def analyze_frequency(input_string):
# 将字符串转换为小写以忽略大小写
input_string = input_string.lower()
# 过滤出仅包含a-z字母的字符串
filtered_string = ''.join(filter(str.isalpha,一 input_string))
# 使用Counter来统计字符频率
frequency_counter = Counter(filtered_string)
# 仅保留a-z字母的频率,并排序(降序)
sorted_frequency = sorted(frequency_counter.items(), key=lambda item: item[1], reverse=True)
# 输出结果
for char, freq in sorted_frequency:
print(f"{char}: {freq}")
# 获取用户输入的字符串
input_string = input("请输入一串字符串: ")
# 调用函数进行分析
analyze_frequency(input_string)
-
from collections import Counter
:从collections
模块导入Counter
类。Counter
是一个字典子类,用于计数可哈希对象。 -
import string
:导入string
模块,但在此代码中实际上并未使用到string
模块的内容。如果您打算使用string.ascii_lowercase
来代替手动指定小写字母范围,那么应该移除对string
模块的导入注释。 -
定义
analyze_frequency
函数,它接受一个参数input_string
。 -
input_string = input_string.lower()
:将输入字符串转换为小写,以确保分析时不区分大小写。 -
filtered_string = ''.join(filter(str.isalpha, input_string))
:使用filter
函数和str.isalpha
方法过滤出字符串中的字母字符,然后使用join
方法将它们连接成一个新的字符串。 -
frequency_counter = Counter(filtered_string)
:使用Counter
类对过滤后的字符串进行计数,得到每个字母的频率。 -
sorted_frequency = sorted(frequency_counter.items(), key=lambda item: item[1], reverse=True)
:将Counter
对象的项(即字母和频率的元组)按频率(即元组的第二个元素)进行降序排序。这里使用了sorted
函数和lambda
函数作为key
参数,以指定排序的依据。
二、随机密码生成。编写一个程序在26个字母大小写和9个数字组成的列表中随机生成10个八位密码:
import random
import string
def generate_passwords(num_passwords, password_length):
# 创建包含大小写字母和数字的字符集
characters = string.ascii_letters + string.digits
passwords = []
for _ in range(num_passwords):
# 从字符集中随机选择字符组成密码
password = ''.join(random.choice(characters) for _ in range(password_length))
passwords.append(password)
return passwords
# 生成10个八位密码
num_passwords = 10
password_length = 8
passwords = generate_passwords(num_passwords, password_length)
# 打印生成的密码
for i, password in enumerate(passwords, start=1):
print(f"Password {i}: {password}")
import random
:导入random
模块,用于生成随机数。import string
:导入string
模块,该模块包含一组常用的字符串常量。
python复制代码
def generate_passwords(num_passwords, password_length): |
定义一个名为generate_passwords
的函数,该函数接受两个参数:num_passwords
(要生成的密码数量)和password_length
(每个密码的长度)。
4.
python复制代码
characters = string.ascii_letters + string.digits |
在函数内部,创建一个名为characters
的字符串,它包含所有大小写字母(string.ascii_letters
)和数字(string.digits
)。
5.
python复制代码
passwords = [] |
初始化一个空列表passwords
,用于存储生成的密码。
6.
python复制代码
for _ in range(num_passwords): |
使用for
循环来迭代指定次数(即要生成的密码数量)。
7.
python复制代码
password = ''.join(random.choice(characters) for _ in range(password_length)) |
在循环体内,使用列表生成式和random.choice(characters)
来生成一个由随机字符组成的字符串,该字符串的长度由password_length
参数指定。然后,使用join
方法将这个字符列表转换成一个字符串。
8.
python复制代码
passwords.append(password) |
将生成的密码添加到passwords
列表中。
9.
python复制代码
return passwords |
函数返回包含所有生成密码的列表。
10.
python复制代码
num_passwords = 10 | |
password_length = 8 |
设置要生成的密码数量和每个密码的长度。
11.
python复制代码
passwords = generate_passwords(num_passwords, password_length) |
调用generate_passwords
函数,并将返回的密码列表赋值给变量passwords
。
12.
python复制代码
for i, password in enumerate(passwords, start=1): | |
print(f"Password {i}: {password}") |
使用enumerate
函数和for
循环来迭代passwords
列表,并打印每个密码。enumerate
函数的start
参数设置为1,以便密码编号从1开始。
补:enumerate(iterable, start=0)
iterable:一个可以遍历的对象,如列表、元组、字符串等。
start:索引的起始值,默认为 0。
enumerate() 函数返回一个枚举对象,该对象生成由 (index, value) 对组成的迭代器,其中 index 是从 start 开始的索引(默认为 0),value 是从 iterable 中获取的值。