习题
1、输入一个年份,输出是否为闰年,(能被4整除但是不能被100整除,或者能被400整除.)
year = eval(input("请输入一个年份:"))
if (year % 400 == 0) or (year % 100 == 0 and year % 4 != 0):
print("{}is leap year".format(year))
else:
print("{}is common year".format(year))
2、输入一个五位数,判断该数字是否为回文数。
(回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。)例如:12321
s = input("请输入回文数:")
方法一
if s[0] == s[-1] and s[1] == s[-2]:
print("is palindromes")
方法二
if s == s[::-1]
print("is palindromes")
3、编写程序,从键盘上获得用户连续输入且用逗号分隔的若干个数字(不必以逗号结尾),计算所有输入数字的和并输出。
例如:输入 1,2,3,4,5
输出 15
4、键盘输入一个 9800 到 9811 之间的正整数 n ,作为 Unicode 编码,把 n -1 、 n 和 n + 1 三个 Unicode 编码对应字符
按照如下格式要求输出到屏幕:宽度为11 个字符,加号字符+填充,居中。
例如:键盘输入: 9802 屏幕输出:++++♉♊♋++++
n = eval(input("请输入一个介于9800-9811的正整数"))
print("{:+^11}{:+^11}{:+^11}".format(chr(n-1)+chr(n)+chr(n+1)))
宽度11局中+填充
注意format括号内字符用加号连接才能最终打印出三个字符
文件打开方式
文件
文件是存储在辅助存储器上的一组数据序列,可以包含任何数据内容
文件包括两种类型:文本文件和二进制文件
文件的类型
- 文本文件:一般由单一特定编码的字符组成,e.g.UTF-8编码
- 二进制文件L直接由比特0和比特1组哼,文件内部数据的组织格式与文件用途有关,二进制是信息按照非字符但特定格式形成的文件e.g.png格式的图片文件、avi格式的视频文件
- 二进制和文本文件的区别:在于是否有统一的字符编码
- 无论文件创建为哪种文件均可以用“文本文件方式”和“二进制文件方式”打开,但打开后的操作不同
采用文本方式读入文件,文件经过编码形成字符串,打印出有含义的字符;采用二进制方式打开文件,文件被解析为字节流
#文本方式打开
f = open('a.txt','rt')
print(f.readline())
f.close()
#二进制方式打开
f = open('a.txt','rb')
print(f.readline())
f.close()
文件的打开和关闭——打开-操作-关闭
Python通过open()函数打开一个文件,并返回一个操作这个文件的变量
<变量名> = open(<文件路径及文件名>,<打开模式>)
打开模式 | |
---|---|
‘r’ | 只读模式,如果文件不存在则返回FileNotFoundError,默认值 |
‘w’ | 覆盖写模式,文件不存在则创建,存在则完全覆盖原文件 |
‘x’ | 创建写模式,文件不存在则创建,存在则返回异常FileExistsError |
‘a’ | 追加写模式,文件不存在则创建,存在则在原文件最后追加内容 |
‘b’ | 二进制文件模式 |
‘t’ | 文本文件模式,默认值——‘rt’==‘r’ |
‘+’ | 与’r/w/t/a’一起使用,在原功能基础上增加同时读写功能,例如:‘r+’,注意’r+‘与’w+’ 有区别 |
#f是文件对象
f = open('C:\\Users\\11397\\Desktop\\abc.txt','r',encoding = 'utf-8')
#注意转义字符,所以双斜杠或者反斜杠
#当打开的文案和模块在不同目录下,写绝对路径,当在同一目录下,可以写相对路径
f = open('C:/Users/11397/Desktop/abc.txt','r',encoding = 'utf-8')
s = f.read()
print(s)
f.close()
f = open('b.txt','w')
f.write('今天天气真好!')#wirte参数必须是字符串
f.close()
f = open('b.txt','ab')#以二进制流的形式追加写,此时不可以指定编码格式uncoding='utf-8'
f.write('我们去打篮球吧!')
f.close()
文件的读写
文件的读取
f = open('文件.txt','r',encoding = 'utf-8')
s = f.read(3)#读取文本前三个字符
print(s)#type(s) = 'str'
f.close()
f = open('文件.txt','r',encoding = 'utf-8')
s = f.readline()
print(s)
f.close()
f = open('文件.txt','r',encoding = 'utf-8')
s = f.readlines()
print(s)#type(s) = 'list'
f.close()
方法 | 含义 |
---|---|
f.read(size=-1) | 从文件中读入整个文件,参数可选,或读取前size长度的字符串或字节流 |
f.readline(size=-1) | 从文件中读入一行内容,参数可选,或读取该行前size长度的字符串或字节流,读取后指针停留在该行行尾 |
f.readlines(hint=-1) | 从文件中读取所有行,以每行元素形成一个列表,参数可选,读入hint行 |
f.seek(offset,whence) | 改变当前文件操作指针的位置,whence的值:0;文件开头;1:当前位置 2:文件结尾 |
offset:开始的偏移量,表示要从哪个位置开始偏移,0代表从文件开头算起,1代表从当前位置开始算起,2代表从文件末尾算起
whence:可选,默认值为0
f = open('文件.txt','r',encoding = 'utf-8')
s = f.read(),也就是代表需要移动偏移的字节数,如果是负数表示从倒数第几位开始
print(s)
#第二次读取,由于第一次读完光标停留在末尾,需要用seek定位到开头
string = f.seek(0,0)
print(string)
f.close()
文件的写入
方法 | 含义 |
---|---|
f.write() | 向文件写入一个字符串或字节流 |
f.writelines(lines) | 将一个元素为字符串的列表写入文件,无返回值 |
f = open('文件.txt','w')
f.write('学习很难,但是很快乐!')
f.close()
f = open('文件.txt','w')
ls = ['black\n','white\n','red\n','green\n']
f.writelines(ls)
f.close()
一维数据的处理
数据的组织维度
根据数据的关系不同,数据组织可以分为:一维数据、二维数据和高维数据
- 一维数据的存储
总体思路:采用特殊字符分隔各数据
1)采用空格分隔 北京 上海 天津 重庆
2)采用逗号分隔 北京,上海,天津,重庆
3)采用换行分隔 北京
上海
天津
重庆
4)采用其他特殊符号e.g.分号分隔 北京;上海;天津;重庆 在csv中逗号相当于换格
csv(comma-separated values,逗号分隔值)格式:采用逗号分割的存储格式
s = '北京','上海','天津','重庆'
f = open('city.csv','w')
f.write(s)
f.close()
#列表对象输出为csv格式文件
ls = ['北京','上海','天津','重庆']
f = open('city.csv','w')
f.write(','.join(ls))
f.close()
对一维数据处理,首先从csv读入一维数据,并将其表示为列表对象
f = open('city.csv','r')
s = f.read()
print(s.strip('\n').split(','))
f.close()
二维数据的处理
二维数据的存储
二维数据由一维数据组成,用csv格式文件存储
csv每一行是一维数据,整个csv文件是一个二维数据
二维列表对象输出为csv格式文件方法:
采用遍历循环和字符串的join()方法结合
ls=[['学校','报考人数','录取人数','理科人数'],
['xx中学','100','60','30'],
['xx实验中学','150','30','80']]
f = open('school.csv','w')
for row in ls:
f.write(','.join(row) + '\n')
f.close()
#读取
f = open('school.csv','w')
ls = f.readlines()#将csv一行行读取,形成一个小列表,每一行是一个元素
L = []
for line in ls:
L.append(line.strip('\n').split(','))
f.close()
二维数据处理等同于二维列表的操作,与一维列表不同,二维列表一般需要借助循环遍历实现对每个数据的处理,基本代码格式如下:
for row in ls:
for item in row:
<对第row行第item列元素进行处理>