第三章 Python数据组织结构

1.编写程序,逐个读入N个整数 (以读入“.”表示输入结束),求这组数值的算术和、算术平均值和标准差。标准差的计算公式为σ = √[ Σ (xi - μ)² / N ],其中,N 为数值的个数,μ为这组数值的算术平均值。

import math

# 输入整数,以'.'结束输入
a = []
while True:
    try:
        num = input("请输入一个整数 (输入'.'结束输入): ")
        if num == '.':
            break
        a.append(int(num))
    except ValueError:
        print("请输入有效整数!")

# 计算算术和
sum_data = sum(a)

# 计算算术平均值
mean = sum_data / len(a)

# 计算标准差
v = sum((x - mean) ** 2 for x in a) / len(a)
s = math.sqrt(v)

print(f"算术和: {sum_data}")
print(f"算术平均值: {mean}")
print(f"标准差: {s}")

2.编写程序,输入一串正整数,并使用折半递归的方法求它们的和。例如:输入一串正整数:3,4,5,2,3,1,4,2,1,2,4,9,3 和为:43

def a(s, l, r):                # a 代表自定义的函数,s 代表 arr,l 代表 start,r 代表 end
    if l == r:                 # 如果 l 和 r 相等,表示只有一个元素需要求和
        return s[l]
    m = (l + r) // 2           # 计算中间索引,将列表拆分为两半
    left = a(s, l, m)          # 递归计算左半部分的和
    right = a(s, m + 1, r)     # 递归计算右半部分的和
    return left + right        # 返回左半部分和右半部分的和

i = input("输入一串正整数,用逗号分隔:")  # 接受输入的一串正整数
n = [int(x) for x in i.split(",")]      # 将输入的字符串分割成整数列表

if n:                         # 如果输入了整数
    t = a(n, 0, len(n) - 1)   # 调用 a 函数计算整数列表的总和,从索引 0 到 len(n) - 1
    print("和为:", t)         # 打印计算出的和
else:
    print("没有输入任何整数。")  # 如果没有输入整数,打印提示信息

2.1 若使用迭代的方法:

# 输入一串正整数,以逗号分隔
string = input("请输入一串正整数,以逗号分隔:")
a = [int(x) for x in string.split(',')]         # 将输入的字符串分割成整数列表。
#使用split(',')方法将输入的字符串根据逗号分隔成多个部分,然后使用列表推导式将这些部分转换为整数,并将它们存储在名为a的列表中。

if len(a) == 0:                                 # 检查是否没有输入任何数字
    print("没有输入任何数字")
else:
    total = 0                                   # 初始化一个变量来存储总和

# 遍历整数列表,将它们逐个累加到总和
    for i in a:                                 # 遍历整数列表a中的每个整数,并将当前整数存储在变量i中。
        total += i                              # 在每次迭代中,将当前整数i添加到total变量中,以累积它们的和。
    print("和为:", total)

3.编写一个revString(s) 函数,将一串英文句子反序输出。其中参数s为原字符串,函数返回反序后的字符串。例如:
输入: There's only one corner of the universe you can be sure of improving, and that's your own self.
输出: .fles nwo ruoy s'taht dna , gnivorpmi fo erus eb nac uoy esrevinu eht fo renroc enoylno s'erehT

def revString(s):
    # 使用字符串切片来实现反转
    reversed = s[::-1]
    return reversed

input = "There's only one corner of the universe you can be sure of improving, and that's your own self."
output = revString(input)
print(output)

4.编写程序,根据给定的调查统计结果:

编号abcdefghijklmnopqrstuvwxyz
喝茶
喝咖啡

计算并输出如下所示的喝茶和喝咖啡样本统计相依表。 |​​​​​​¶

# 定义调查统计结果   定义字典s
s = {
    'a': 'tea', 'b': 'tea', 'c': 'tea', 'd': 'tea', 'e': 'tea', 'f': 'tea', 'g': 'tea',
    'h': 'tea', 'i': 'tea', 'j': 'tea', 'k': 'tea', 'l': 'tea', 'm': 'tea', 'n': 'tea',
    'o': 'tea', 'p': 'tea', 'q': 'tea', 'r': 'tea', 's': 'tea', 't': 'tea', 'u': 'tea',
    'v': 'tea', 'w': 'tea', 'x': 'tea', 'y': 'tea', 'z': 'tea',

    'a': 'coffee', 'c': 'coffee', 'e': 'coffee', 'g': 'coffee', 'i': 'coffee', 'k': 'coffee',
    'm': 'coffee', 'o': 'coffee', 'q': 'coffee', 's': 'coffee', 'u': 'coffee', 'w': 'coffee',
    'y': 'coffee'
}

# 初始化统计表 a,是一个嵌套字典,用于存储不同饮品('tea' 或 'coffee')之间的关系。
a = {
    'tea': {'coffee': 0, '/coffee': 0},
    '/tea': {'coffee': 0, '/coffee': 0}
}

# 统计样本。 
for t,c in s.items():     #遍历字典s中的每个字母('a' 到 'z'),并根据它们对应的饮品('tea' 或 'coffee')更新统计表a。
    if t.isalpha():       #如果字母是字母字符(.isalpha()用于检查),则根据饮品类型将相应的统计值递增。
        if c == 'tea':                  #检查饮品类型 c 是否为 'tea'。如果 c 是 'tea',则执行下面的代码块。
            a['tea']['coffee'] += 1     #这一行代码会将统计表 a 中的 'tea' 行与 'coffee' 列的计数加一,表示在喝茶的情况下也喝了咖啡。
        elif c == 'coffee':             #检查c是不是‘coffee’
            a['/tea']['coffee'] += 1    #这一行代码会将统计表 a 中的 '/tea' 行与 'coffee' 列的计数加一,表示在喝咖啡的情况下也喝了茶。

# 输出统计表。   {}中的变量表示从统计表中提取的数据,| 和 - 用于绘制表格边框
print("| coffee|/coffee|")
print("----------------------")
print(f" tea|   {a['tea']['coffee']}|    {a['tea']['/coffee']}|   {a['tea']['coffee'] + a['tea']['/coffee']}")
print(f"/tea|   {a['/tea']['coffee']}|    {a['/tea']['/coffee']}|   {a['/tea']['coffee'] + a['/tea']['/coffee']}")
print("----------------------")
print(f"    |   {a['tea']['coffee'] + a['/tea']['coffee']}|    {a['tea']['/coffee'] + a['/tea']['/coffee']}|   {a['tea']['coffee'] + a['tea']['/coffee'] + a['/tea']['coffee'] + a['/tea']['/coffee']}")

5.编写程序,输人一个整数,输出其对应的中文数字串。例如: 输入整数:-2653 ; 中文数字串:负贰陆伍叁​​​​​​¶

def a(n):
    chinese = {
        0: "零", 1: "壹", 2: "贰", 3: "叁", 4: "肆", 5: "伍",
        6: "陆", 7: "柒", 8: "捌", 9: "玖", '-': "负"
    }

    if n < 0:
        s = str(n)[1:]  # 移除负号,取绝对值
        result = chinese['-']
    else:
        s = str(n)
        result = ""

    for i in s:
        result += chinese[int(i)]

    return result

input_n = int(input("输入整数: "))
c = a(input_n)
print(f"中文数字串: {c}")

6.编写程序,实现输人省份,能够输出该省份的城市列表;给出城市,能够反查所属省份。可以使用表3-8中所列的部分省市列表来完成。
表3-8部分省份城市列表:

省份城市
广东省广州市 东莞市 中山市 深圳市
河南省郑州市 南阳市 新乡市 周口市
江苏省苏州市 徐州市 盐城市 无锡市 南京市 镇江市
山东省济南市 青岛市 临沂市

例如,输入:山东省 输出:济南市 青岛市 临沂市
再例如,输入:南京市 输出:江苏省

# 创建省份和城市的映射字典
c = {                            # c:省份对应的城市
    "广东省": ["广州市", "东莞市", "深圳市", "中山市"],
    "河南省": ["郑州市", "南阳市", "新乡市"],
    "江苏省": ["苏州市", "徐州市", "无锡市", "南京市", "镇江市"],
    "山东省": ["济南市", "青岛市", "临沂市"],
}

s = {}                           # s:城市对应的省份
for province, cities in c.items():
    for city in cities:
        s[city] = province

# 用户输入
user_input = input("请输入省份或城市: ")

if user_input in c:                 # 如果输入是一个省份,输出该省份的城市列表
    cities = c[user_input]  
    print("城市: ", " ".join(cities))
elif user_input in s:               # 如果输入是一个城市,输出所属省份
    province = s[user_input]
    print("所属省份: ", province)
else:
    print("找不到相关信息。")

7.编写程序,完成以下内容。
(1)将字符串“k1:1| k2:2| k3:3| k4:4”,处理成 Python 字典。
>>> d
       {'kl': 1, 'k2': 2, 'k3': 3, 'k4': 4}
(2)将由(1)得到的字典,组织成索引名为“value”的1行的DataFrame数据df。
>>> df
          kl  k2  k3  k4
value 1   2    3    4
(3)求由(2)得到的df数据 value 序列的均值,得2.5。

import pandas as pd

# (1) 将字符串处理成 Python 字典
data = "k1:1| k2:2| k3:3| k4:4"
data = data.replace("|", "").split()  # 将字符串处理成一个列表
dictionary = {}  # 创建一个空字典

# 将处理后的列表转换为字典
for i in data:
    key, value = i.split(":")  # 使用 ":" 分割键和值
    dictionary[key] = int(value)  # 将键值对添加到字典中,注意将值转换为整数类型

# (2) 将字典组织成 DataFrame
df = pd.DataFrame([dictionary])  # 使用 Pandas 创建一个包含字典数据的 DataFrame

# (3) 求 DataFrame 数据的均值
mean_value = df.mean(axis=1)  # 计算 DataFrame 中每行的均值。  mean_value 包含了每行的均值,即每个键对应的均值。
print(mean_value)

8.编写程序,生成一个包含50个在0到 100之间的随机整数的列表(提示:可使用numpy.random.randint()函数来产生),然后删除其中所有奇数(提示:可考虑从后向前删除)

import numpy as np

# 生成包含50个在0到100之间的随机整数的列表
a = np.random.randint(0, 101, 50)

# 使用列表推导删除所有奇数:使用列表推导式创建一个新的列表s,其中包含了a中的所有偶数。
s = [x for x in a if x % 2 == 0]        #检查每个元素是否是偶数(余数为0),如果是偶数,则将其包含在s列表中

# 输出删除奇数后的列表
print("随机偶数列表:", s)

9.找一段英文,编写程序,对文中所出现单词的频次进行统计,并按照单词频次从高到低输出频次统计表。统计时,需区分大小写。

text = "This is a sample text. This text is just a sample. Sample text is important."

# 分割文本为单词
words = text.split()

# 创建一个空字典用于存储单词频次
a = {}

# 统计单词频次
for word in words:
    # 去除标点符号
    word = word.strip('.,!?"\'')
    
    # 更新字典中的频次,区分大小写
    if word in a:
        a[word] += 1
    else:
        a[word] = 1

# 按频次从高到低排序
s = dict(sorted(a.items(), key=lambda item: item[1], reverse=True))

# 输出频次统计表
print("单词频次统计表:")
for word, count in s.items():
    print(f"{word}: {count}")

9.1 按首次出现开始算,不按频次排序

# 不按频次,而按首次出现
from collections import Counter

text = "This is a sample text. This text is just a sample. Sample text is important."

# 分割文本为单词并统计频次
words = text.split()
word_count = Counter(words)

# 输出频次统计表
print("单词频次统计表:")
for word, count in word_count.items():
    print(f"{word}: {count}")

9.2 不排除标点符号,也统计标点

#法一:
from collections import Counter

# 输入英文文本
text = "This is a sample text . This text is just a sample . Sample text is important ."

# 分词并统计单词频次
words = text.split()
a = Counter(words)           

# 按照频次从高到低排序
s = dict(sorted(a.items(), key=lambda item: item[1], reverse=True))

# 输出频次统计表
print("单词频次统计表:")
for word, count in s.items():
    print(f"{word}: {count}")

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

M_Ava

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值