python复习2+练习

news2024/10/6 2:39:40

1. 列表推导式


列表推导式是一种简洁地构建列表的方法。它的一般形式是:
[表达式 for 变量 in 可迭代对象 if 条件]

**练习题:**

给定一个数字10列表,生成一个新列表,其中包含所有大于5的数字。

dict1 = [x for x in range(10) if x > 5]
print(dict1)

2. 字典推导式

字典推导式用于创建字典,其基本形式是:

{键: 值 for 变量 in 可迭代对象 if 条件}


 

**练习题:**
给定一个数字列表,生成一个新字典,其中包含每个数字及其平方。

dict1 = {x: x * x for x in range(5)}
print(dict1)

3.混合数据类型练习

print(
    """1、 card_type = ["♣", "♦", "♥", "♠"] 生成一副扑克牌52张,要求把52张牌放到一个集合输出,同时加一个元组输出(("红桃A","♥A"),(...))")""")
card_type = ["♣", "♦", "♥", "♠"]
tuple1 = []
for i in card_type:

    for x in ("A", 2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K"):
        tuple2 = []
        if i == "♣":
            tuple2.append(f"梅花{x},{i}{x}")
        elif i == "♦":
            tuple2.append(f"方块{x},{i}{x}")
        elif i == "♥":
            tuple2.append(f"红桃{x},{i}{x}")
        else:
            tuple2.append(f"黑桃{x},{i}{x}")
        tuple1.append(tuple(tuple2))
print(tuple1)








print("""2、假设我们有两个长度相同的列表,分别为fruits和prices , 两个列表中的元素分别如下:
fruits = ["apple", "orange", "pear"]
prices = [4,5,6]
我们希望用代码实现列表生成式用以对上述两个列表进行合并,即列表中的元素为 (fruit, price) 形式。即样例的输出如下:
[("apple",4), ("orange",5), ("pear",6)]""")
fruits = ["apple", "orange", "pear"]
prices = [4, 5, 6]
pri = [(x, y) for x, y in zip(fruits, prices)]
print(pri)








print("""3、将第2题的两个列表转化成字典形式输出{'apple':4,'orange':5,'pear':6},不少于2种做法""")
print("方法1:")
pri = dict(pri)
print(pri)



print("方法2:")
pri2 = {}
for i in fruits:
    n = fruits.index(i)
    pri2[i] = prices[n]
print(pri2)








print("""4、用一行Python代码从给定列表中取出所有的奇数和偶数,如这个列表""")
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
o, j = [x for x in a if x % 2 == 1], [y for y in a if y % 2 != 1]
print("奇数", o)
print("偶数", j)








print("""5、用Python编写程序检查一序列中所有数字是否唯一,比如让用户输入一个序列,以空格分隔每个数字,然后检测数字是否唯一
  """)

li = list(input().split(" "))
print(li)
if len(li) == len(set(li)):
    print("没有重复")
else:
    print("重复")








print("""6、编写一个程序来组合两个不同的词典。组合时,如果找到相同的键,则可以将这些相同键的值相加, 输出新字典。""")
d1 = {'key1': 50, 'key2': 100, 'key3': 200}
d2 = {'key1': 200, 'key2': 100, 'key4': 300}
d3 = {}
for i in d1.keys():
    if i in d2.keys():
        d3[i] = d1[i] + d2[i]
    else:
        d3[i] = d1[i]
for i in d2.keys():
    if i not in d1.keys():
        d3[i] = d2[i]
print(d3)








print("7、一行代码展开列表,比如list1 = [[1,2],[3,4],[5,6]]转成[1,2,3,4,5,6]")

list1 = [[1, 2], [3, 4], [5, 6]]
li1 = [y for x in list1 for y in x]
print(li1)








print("8、统计字符串中大写字母的数量str2 = 'werrQWSDdiWuW'")
str2 = 'werrQWSDdiWuW'
count = 0
for i in str2:
    if i.isupper():
        count += 1
print(count)








print("""9、统计字符串中每个字符出现次数,并输出一个字典,如这样str1 = "nihsasehndciswemeotpxc"的字符串
""")
str1 = "nihsasehndciswemeotpxc"
dc = {}
for i in str1:
    num = str1.count(i)
    dc[i] = num
dc = dict(dc)
print(dc)








print("""10、现有一堆快递地址信息,需对其进行按省分拣,以方便后续投递""")
dc1 = [
['王*龙', '北京市海淀区苏州街大恒科技大厦南座4层'],
['庞*飞', '北京市昌平区汇德商厦四楼403'],
['顾*锐', '江苏省扬州市三垛镇工业集中区扬州市立华畜禽有限公司'],
['王*飞', '上海市徐汇区上海市徐汇区H88越虹广场B座5E'],
['华*升', '北京市海淀区杰睿大厦'],
['朱*锴', '上海市浦东新区川沙新镇华川家园33号楼503'],

    ]
dc2 = {}
dc3 = []
for i in dc1:
    address = i[1][:3]
    if address not in dc2:
        dc2[address] = []
    dc2[address].append(i)
print(dc2)

4.文件操作

在 Python 中,文件操作是一项基本而重要的任务,允许你读取、写入、修改和删除文件。Python 提供了一套简单的函数和方法来处理文件,这些操作通常包括以下几个步骤:

  1. 打开文件:使用 open() 函数打开一个文件,可以指定不同的模式,如只读 ('r')、写入 ('w')、追加 ('a') 等。

  2. 读取文件:可以逐行读取,也可以一次性读取整个文件的内容。

  3. 写入文件:可以将字符串写入文件,写入模式下如果文件存在则覆盖原有内容,追加模式下则在文件末尾添加内容。

  4. 关闭文件:使用文件对象的 close() 方法关闭文件,释放系统资源。

  5. 文件指针:文件打开时,都有一个指针指向文件的开头。读取或写入文件时,指针会移动。

  6. 文件缓冲:Python 对文件写入操作通常有缓冲,可以通过 flush() 方法立即将缓冲区内容写入文件。

  7. 二进制文件:可以以二进制模式打开文件,这样可以读取或写入非文本文件,如图片、视频等。

  8. 文件编码:在处理文本文件时,可以指定编码方式,如 'utf-8',确保正确读取和写入字符。

  9. 错误处理:使用 try...except 语句来捕获和处理文件操作中可能出现的错误。

  10. 文件迭代:可以迭代文件对象,Python 会自动逐行读取。、、

open的使用:
"""
open(file, mode='r', buffering=-1, encoding=None)
    file: 必需,文件路径(相对或者绝对路径)。 例如: F:\new\code .但是这样输入路径肯能会发生转义,\n会换行,为了避免我们有两种方法。
            1. 用\\代替\ :                         "F:\\new\\code"
            2.在最前面加上 r ,表示原生路径,改为       r"F:\new\code"

    mode: 可选,文件打开模式
            1. r 表示只读,如果不存在会报错,指向文件开头
            2. w 表示先清空再写入,如果不存在就创建,指向文件开头
            3. b 表示二进制形式
            5. t 表示文本形式打开
            6. a表示追加,指向文件结尾
    buffering: 设置缓冲
    encoding: 一般使用utf8
"""
4.1 读文件
4.1.1 读文本文件

file = open(r"info.txt",mode='rt',encoding='utf-8')  # 打开文件
data = file.read()                                   # 读取文件赋值给data
print(data)                                          # 打印内容
file.close()
写入文本文件
file = open(r"info1.txt",mode='wt',encoding='utf-8')
file.writelines("你好!\t\t世界!")
file.close()

4.1.2读取二进制文件
file = open(r"info.txt",mode='rb')
data = file.read()
print(data)
file.close()
写入二进制文件

file = open(r"dc.jpg",mode='rb')
data = file.read()
file.close()
file = open(r"dc_copy.jpg",mode="wb")
file.write(data)
file.close()

4.2基础案例

# 多用户注册
file = open(r"info2.txt",mode='wt',encoding='utf-8')
while   True:
     n = input("按Q/q退出")
     if  n.lower() == "q":
         break
     name = input("请输入用户名:  ")
     pwd = input("请输入密码:")
     file.write("\n{}-{}".format(name,pwd))
file.close()

# # 下载网上图片
import requests

res = requests.get(
     url= "https://huaban.com/pins/5489840188?modalImg=https%3A%2F%2Fgd-hbimg.huaban.com%2F08d47b524dee3591eb429ea93684b39d7d31701a4bf5c-QyirlJ" ,
     headers = {
 "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
                "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
 }
 )
res.content

file = open(r"dc3.jpg", mode="wb")
file.write(data)
file.close()
r+案例: 先读再后面写没有问题,因为读之后光标会移动。如果先写,需要转移光标位置。 
w+同理
nfo_r+.txt ---> 你好啊世界!
file = open(r"info_r+.txt",mode='rt+',encoding='utf-8')
data =  file.read()
file.write("你好,dc")
file.close()
# 结果: 你好啊世界!你好,dc


file = open(r"info_r+.txt",mode='rt+',encoding='gbk')
file.write("你好,dc")
data =  file.read()
print(data)
file.close()
# 结果: 界!
原因就是打开时,光标再开头,所以再开头就开始了替换,可以加入光标进行改进恢复
4.3 光标
在a模式下没用,a模式下光标永远在结尾
移动光标
file.seek(0)  # 将光标移到指定字节位置,0代表开始,utf-8编码一个汉字占3个字节
file.seek(3)  # 将光标移动到第3个字节位置
# 获取光标位置
pos = file.tell()
4.4 flush 
从缓冲区刷到硬盘,一般用在循环写入
file.flush()
# 4.5 with上下文管理用法,会自动close

# 打开单个文件
with  open(r"xxxx",mode="XX",encoding="xxx") as  alias:
#     pass
# # 打开多个文件
with open(r"xxxx",mode="XX",encoding="xxx") as f1 , open(r"xxxx",mode="XX",encoding="xxx") as f2:
     pass
# 4.6 读操作
# 读所有readlines()

file = open(r"info1.txt",mode='rt',encoding='utf-8')
a = file.readlines()
print(a)
file.close()
# 按行读取readline(),如果再print打印出来的话,会出现多个空行,是因为每行后面都有换行符,然后print里面也有一个换行符

file = open(r"info1.txt",mode='rt',encoding='utf-8')
a = file.readline()
print(a,end="")
a = file.readline()
print(a.strip())
file.close()

4.7 写操作

# write()可以再里面添加转移字符
file = open(r"info1.txt",mode='wt',encoding='utf-8')

a = file.write("nh\ndad")

file.close()

4.8 练习

4.8.1. 下载视频


import requests
res = requests.get(
url="视频网站",
  headers={
 "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
  }
  )
res.content
with open("text.mp4",mode="wb") as f1:
    f1.write(res.content)

4.8.2 

计算nginx的uv(统计指定用户的访问量access.log文件)

access.log

192.168.1.10 - - [10/Oct/2024:12:00:00 +0000] "GET /index.html HTTP/1.1" 200 1546 "http://www.example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
192.168.1.11 - - [10/Oct/2024:12:01:23 +0000] "POST /submit_form HTTP/1.1" 303 0 "http://www.example.com/form" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15"
192.168.1.12 - - [10/Oct/2024:12:02:45 +0000] "GET /images/logo.png HTTP/1.1" 404 0 "http://www.example.com/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0"
192.168.1.10 - - [10/Oct/2024:12:04:10 +0000] "GET /about.html HTTP/2.0" 200 231 "http://www.example.com/" "Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/34.0 Mobile/15E148 Safari/605.1.15"
192.168.1.11 - - [10/Oct/2024:12:05:32 +0000] "PUT /update_profile HTTP/1.1" 403 178 "http://www.example.com/profile" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0"
192.168.1.15 - - [10/Oct/2024:12:06:54 +0000] "DELETE /api/resource HTTP/1.1" 204 0 "http://www.example.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36"
192.168.1.11 - - [10/Oct/2024:12:08:16 +0000] "GET /contact.html HTTP/1.1" 200 1300 "http://www.example.com/" "Mozilla/5.0 (iPad; CPU OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/88.0.4324.124 Mobile/15E148 Safari/604.1"
192.168.1.10 - - [10/Oct/2024:12:09:38 +0000] "GET /js/app.js HTTP/1.1" 200 8204 "http://www.example.com/" "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36 Edge/88.0.710.61"
192.168.1.12 - - [10/Oct/2024:12:11:00 +0000] "GET /favicon.ico HTTP/1.1" 200 52 "http://www.example.com/" "Mozilla/5.0 (X11; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0"
192.168.1.11 - - [10/Oct/2024:12:12:22 +0000] "GET /robots.txt HTTP/1.1" 404 0 "http://www.example.com/" "Googlebot-Image/1.0"
ip = "192.168.1.11"  # 指定统计192.168.1.11的访问次数
totol = 0            # 统计次数初始为0

with open("access.log", mode="rt", encoding="utf-8") as fa:
    for i in fa:
         if ip in i:
             totol += 1
 print(ip,totol)   # 192.168.1.11 4

4.8.3 计算nginx的pv(统计所有用户的访问量access.log文件)


num = {} 
with open("access.log", mode="rt", encoding="utf-8") as fa1:
     for i in fa1:

         if i.split()[0] not in num:
             num[i.split()[0]] = 1
         else:
             num[i.split()[0]] += 1
print(num)
4.8.4 筛选出股票 当前价大于 20 的所有股票数据

股票代码,股票名称,当前价,涨跌额,涨跌幅,年初至今,成交量,成交额,换手率,市盈率(TTM),股息率,市值
SH601778,N晶科,6.29,+1.92,+43.94%,+43.94%,259.66万,1625.52万,0.44%,22.32,-,173.95亿
SH688566,吉贝尔,52.66,+6.96,+15.23%,+122.29%,1626.58万,8.09亿,42.29%,89.34,-,98.44亿
SH688268,华特气体,88.80,+11.72,+15.20%,+102.51%,622.60万,5.13亿,22.87%,150.47,-,106.56亿
SH600734,实达集团,2.60,+0.24,+10.17%,-61.71%,1340.27万,3391.14万,2.58%,亏损,0.00%,16.18亿
SH900957,凌云B股,0.36,+0.033,+10.09%,-35.25%,119.15万,42.10万,0.65%,44.65,0.00%,1.26亿
SZ000584,哈工智能,6.01,+0.55,+10.07%,-4.15%,2610.86万,1.53亿,4.36%,199.33,0.26%,36.86亿
SH600599,熊猫金控,6.78,+0.62,+10.06%,-35.55%,599.64万,3900.23万,3.61%,亏损,0.00%,11.25亿
SH600520,文一科技,8.21,+0.75,+10.05%,-24.05%,552.34万,4464.69万,3.49%,亏损,0.00%,13.01亿
SH603682,锦和商业,11.73,+1.07,+10.04%,+48.29%,2746.63万,3.15亿,29.06%,29.62,-,55.42亿
SZ300831,派瑞股份,12.27,+1.12,+10.04%,+208.29%,25.38万,311.41万,0.32%,60.59,-,39.26亿









with open(r"above_20.txt",mode="r",encoding="utf-8") as ab:
    ab.readline()             # 跳过第一行字段
    for i in ab:
        a = i.split(",")[2]
        if float(a) >= 20:
            print(i)
4.8.5 .根据要求修改文件的内容,请将文件中的 nebula1 修改为 nebula_tech
#replace方法
with open(r"edit",mode="r+",encoding='utf-8') as fa:
    content = fa.read()
    a = content.replace("nebula1","nebula_tech")
    fa.write(a)
    fa.seek(0)
    print(content)



#打开两个文件,一个读一个写,然后用shutil的move方法改名字
with open(r"edit",mode="r",encoding='utf-8') as fa, open(r"edit_1",mode="w",encoding="utf-8") as fa2:
    for i in fa:
        new_line = i.replace("nebula1","nebula_tech")
        fa2.write(new_line)

import shutil
shutil.move("edit_1","edit") # 将edit_1改名为edit,如果文件存在则覆盖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2190982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数学题-分糖果-答案解析

PDF文档回复:20241005 1[题目描述] 幼儿园有7个小朋友,你是其中之一,有一天你发现无穷多颗糖,最少可以拿16个,最多可以拿23个,你打算拿一些分给小朋友们,分配原则是如果每人(包括你)都可以拿1块糖&#xf…

快速上手C语言【上】(非常详细!!!)

目录 1. 基本数据类型 2. 变量 2.1 定义格式 和 命名规范 2.2 格式化输入和输出(scanf 和 printf) ​编辑 2.3 作用域和生命周期 3. 常量 4. 字符串转义字符注释 5. 操作符 5.1 双目操作符 5.1.1 算数操作符 5.1.2 移位操作符 5.1.3 位操作符…

IDEA下“File is read-only”可能原因及“找不到或无法加载主类”问题的解决

1.File is read-only”可能原因 写代码时想要修改这个静态变量的值,把这个语句注释掉,发现在这个文件中File is read-only无法编辑修改,于是想去掉这个状态 网上查看的解释大多是在File栏目或File->File Properties下可以找到Make File W…

Git介绍--github/gitee/gitlab使用

一、Git的介绍 1.1、学习Git的原因:资源管理 1.2、SCM软件的介绍 软件配置管理(SCM)是指通过执行版本控制、变更控制的规程,以及使用合适的配置管理软件来保证所有配置项的完整性和可跟踪性。配置管理是对工作成果的一种有效保护。 二、版本控制软件 …

常见的基础系统

权限管理系统支付系统搜索系统报表系统API网关系统待定。。。 Java 优质开源系统设计项目 来源:Java 优质开源系统设计项目 | JavaGuide 备注:github和gitee上可以搜索到相关项目

企业必备:搭建大模型应用平台实操教程

最近AI智能体很火,AI智能体平台化产品肯定属于大公司的。但在一些场景下,尤其是对业务数据要求很高的公司,那就只能用私有大模型。不一定完全是为了对外提供服务,对内改造工作流也是需要的。所以 我感觉未来大部分企业都会搞一个…

软考系统分析师知识点二:经济管理

前言 今年报考了11月份的软考高级:系统分析师。 考试时间为:11月9日。 倒计时:35天。 目标:优先应试,其次学习,再次实践。 复习计划第一阶段:扫平基础知识点,仅抽取有用信息&am…

数字乡村综合解决方案

1. 项目背景与战略 《中共中央、国务院关于实施乡村振兴战略的意见》强调实施数字乡村战略的重要性,旨在通过信息技术和产品服务推动农业农村现代化,实现城乡数字鸿沟的弥合。 2. 数字乡村发展纲要 《数字乡村发展战略纲要》明确了全面建成数字乡村的…

颍川陈氏始祖陈寔逆势崛起的原由(二)有贵人相助

园子说颍川 陈寔崛起之初,有两个贵人发挥了关键作用。 第一个就是许县县令邓邵,如果不是他推荐青年陈寔去太学读书,陈寔可能一辈子就要待在许县县衙当小吏了。关于他的记载不详,光这一件事就让他名垂青史,帮助一个穷…

为Floorp浏览器添加搜索引擎及搜索栏相关设置. 2024-10-05

Floorp浏览器开源项目地址: https://github.com/floorp-Projects/floorp/ 1.第一步 为Floorp浏览器添加搜索栏 (1.工具栏空白处 次键选择 定制工具栏 (2. 把 搜索框 拖动至工具栏 2.添加搜索引擎 以添加 搜狗搜索 为例 (1.访问 搜索引擎网址 搜狗搜索引擎 - 上网从搜狗开始 (2…

【AIGC】ChatGPT提示词Prompt助力自媒体内容创作升级

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯高效仿写专家级文章提示词使用方法 💯CSDN博主账号分析提示词使用方法 💯自媒体爆款文案优化助手提示词使用方法 💯小结 &#x1f4af…

王者农药更新版

一、启动文件配置 二、GPIO使用 2.1基本步骤 1.配置GPIO,所以RCC开启APB2时钟 2.GPIO初始化(结构体) 3.给GPIO引脚设置高/低电平(WriteBit) 2.2Led循环点亮(GPIO输出) 1.RCC开启APB2时钟。…

Transformer架构概述(二)

目录 1. Transformer架构概述 1.1 《Attention is All You Need》论文概述 1.2 Transformer的模块组成 1.3 Encoder 和 Decoder 的区别与联系 2. Transformer的并行计算效率相对于RNN的提升 2.1 RNN中的顺序处理问题 2.2 Transformer中的并行化优势 3. Self-Attention机…

Spring Boot框架下的大学生就业招聘平台

5系统详细实现 5.1 用户模块的实现 5.1.1 求职信息管理 大学生就业招聘系统的用户可以管理自己的求职信息,可以对自己的求职信息添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 求职信息管理界面 5.1.2 首页 用户登录可以在首页看到招聘信息展示也一些求职…

setTimeout,setInterval ,requestAnimationFrame定时器

setTimeout,setInterval ,requestAnimationFrame定时器 定时器函数通常用于执行定时任务,也就是说你做了一个功能放在定时器函数里,它可以在特定的时间去执行你的指令,或者说隔多长时间(单位时间内—毫秒为…

为什么每个人都要学习项目管理?

在这个已然到来的超级个体时代,项目管理这项技能,不仅仅是项目经理才需要掌握的,而是每个想要独当一面之人的必备技能。 所谓的独当一面,就是从一个人做好自己的事,到带领一群人从头到尾把事做成。而学习项目管理&…

路由器的工作机制

在一个家庭或者一个公司中 路由器的作用主要有两个(①路由–决定了数据包从来源到目的地的路径 通过映射表决定 ②转送–通过路由器知道了映射表 就可以将数据包从路由器的输入端转移给合适的输出端) 我们可以画一张图来分析一下: 我们好好来解析一下这张图&#x…

Chromium 搜索引擎功能浅析c++

地址栏输入:chrome://settings/searchEngines 可以看到 有百度等数据源,那么如何调整其顺序呢,此数据又存储在哪里呢? 1、浏览器初始化搜索引擎数据来源在 components\search_engines\prepopulated_engines.json // Copyright …

el-pagination组件封装

组件使用 源代码&#xff1a; <script setup> import Pagination from /components/pagination/index.vue import {ref} from "vue";const pageNum ref(1) const pageSize ref(10) const total ref(120)function loadData() {// 加载数据 } </script>…

C++教程一口气讲完!(万字讲解)( ̄y▽ ̄)╭ Ohohoho... 下

C 常量 常量是固定值&#xff0c;在程序执行期间不会改变。这些固定的值&#xff0c;又叫做字面量。 常量可以是任何的基本数据类型&#xff0c;可分为整型数字、浮点数字、字符、字符串和布尔值。 常量就像是常规的变量&#xff0c;只不过常量的值在定义后不能进行修改。 …