数据类型:
列表语法 | 描述 |
---|---|
list.append(obj) | 在列表末尾添加新的对象 |
list.count(obj) | 统计某个元素在列表中出现的次数 |
list.index(obj) | 从列表中找出某个值第一个匹配项的索引位置 |
list.insert(index, obj) | 将对象插入列表 |
list.pop(index) | 移除列表中的index位置一个元素,并且返回该元素的值 |
list.remove(obj) | 移除列表中某个值的第一个匹配项 |
list.reverse() | 反向列表中元素 |
list.sort( key=None, reverse=False) | 对原列表进行排序 |
list.clear() | 清空列表 |
list.copy() | 复制列表 |
len(list) | 列表元素个数 |
del | 删除列表中元素 |
sorted(iterable, key=None, reverse=False) | iterable – 可迭代对象,key – 主要是用来进行比较的元素,reverse = True 降序 , reverse = False 升序 |
python 使用 lambda 来创建匿名函数:
lambda [arg1 [,arg2,…argn]]:expression
如 lambda x:x+1相当于
def g(x):
return x+1
格式化字符串的函数 str.format(),通过 {} 和 : 来代替以前的 %
>>>"{} {}".format("hello", "world") # 不设置指定位置,按默认顺序
'hello world'
文件处理:
在 Windows 上,路径书写使用倒斜杠(\)作为文件夹之间的分隔符。但在 OS X 和Linux 上,使用正斜杠作为它们的路径分隔符。
open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。
注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
常规方法:
file_name = 'text.txt' # 文件名
try:
file = open(file_name, 'r')
# print(file.read()) # 打印读取内容
except OSError:
print('打开失败')
finally:
file.close() #文件关闭
使用with as 自动管理:
file_name = 'te1xt.txt' # 文件名
with open(file_name, 'r') as f: # 使用结束后 自动释放资源 不用使用close
print(f.read())
安装库,如PIL:
pip install pillow
if name == ‘main’: 下的代码只有在该文件作为脚本直接执行才会被执行,而 import 到其他脚本中是不会被执行的
"""
学生成绩管理系统:
1=录入学生 2=显示信息
3=排序总评 4=查找学生
5=插入学生 6=删除学生
7=统计人数 0=退出
"""
from itertools import groupby
# 定义一个列表,用来存储多个学生的信息
students=[]
stu_print="ID:{}\tmath:{}\tproject:{}\tsum:{}"
def Menu():
print(" =================================================\n")
print(" = 欢迎使用成绩管理系统 =\n")
print(" = 1=录入学生 2=显示信息 =\n")
print(" = 3=排序总评 4=查找学生 =\n")
print(" = 5=修改信息 6=删除学生 =\n")
print(" = 7=统计人数 0=退出 =\n")
print(" =================================================\n")
print("请选择:")
def GradeInput():
while 1:
ID=input("请输入学生的学号:")
stumath=int(input("请输入学生的数学成绩:"))
stuproject=int(input("请输入学生的程序设计成绩:"))
stusum = stuproject + stumath
students.append([ID,stumath,stuproject,stusum])
str=input("继续输入学生数据 请按y:")
if (str == 'y'):
continue
else:
break
def Gradeoutput():
print("成绩信息如下:\n")
for info in students:
print(stu_print.format(*info)) # 列表解包
def Order():
temp_list=[]
temp_list=sorted(students,key=lambda student: student[3], reverse=True) # 按总分降序排序
for info in temp_list:
print(stu_print.format(*info))
def Stusearch():
while 1:
inID=input("请输入您要查找的学号:")
for temp in students:
if inID in temp:
print("查找到学生")
print(stu_print.format(*temp))
break
else:
print("没有该学生信息")
# print("继续查找请按y:")
str = input("继续输入学生数据 请按y:")
if str == 'y':
continue
else:
break
def StuDelete():
while 1:
delID=input("请输入您要删除的学生学号:")
for temp in students:
if delID in temp:
str = input("是否删除?y/n")
if str == 'y':
print("删除完成\n")
students.pop(students.index(temp))
break # 跳出for循环
else:
print("没有该学生信息")
str = input("继续删除其他学生请按y:")
if str == 'y':
continue # 继续while循环
else:
break # 跳出while循环
def Reverse():
index=None
while 1:
reID = input("请输入您要修改的学生学号:")
for temp in students:
if reID in temp:
str = input("是否修改?y/n")
if str == 'y':
index=students.index(temp)
stumath = int(input("请输入学生的数学成绩:"))
stuproject = int(input("请输入学生的程序设计成绩:"))
stusum = stuproject + stumath
students[index][1:]=[stumath,stuproject,stusum] # 切片 修改
print("修改完成\n")
break # 跳出for循环
else:
print("没有该学生信息")
str = input("继续修改其他学生请按y:")
if str == 'y':
continue # 继续while循环
else:
break # 跳出while循环
def Statis():
k=len(students)
num1=0
num2=0
num3=0
num4=0
num5=0
for i in range(k):
if students[i][3]/2<60:
num1=num1+1
elif students[i][3]/2>=60 and students[i][3]/2<70:
num2=num2+1
elif students[i][3]/2>=70 and students[i][3]/2<80:
num3=num3+1
elif students[i][3]/2>=80 and students[i][3]/2<90:
num4=num4+1
elif students[i][3]/2>=90 and students[i][3]/2<=100:
num5=num5+1
# print("成绩区间\t100~90\t89~80\t79~70\t69~60\t<60\n")
print('平均成绩:<60\t%d人\t69~60\t%d人\t79~70\t%d人\t89~80\t%d人\t100~90\t%d人\n' %(num1,num2,num3,num4,num5))
def main():
# in_data=input("选择: \n")
Menu()
while 1:
a=int(input("选择: \n"))
if a == 1:
print("您选择了1=录入学生")
GradeInput()
Menu()
elif a == 2:
print("您选择了2=显示信息")
Gradeoutput()
Menu()
elif a == 3:
print("您选择了3=排序总评")
Order()
Menu()
elif a == 4:
print("您选择了4=查找学生")
Stusearch()
Menu()
elif a == 5:
print("您选择了5=修改信息")
Reverse()
Menu()
elif a == 6:
print("您选择了6=删除学生")
StuDelete()
Menu()
elif a == 7:
print("您选择了7=统计人数\n")
Statis()
Menu()
elif a == 0:
print("退出成功!")
break
else:
print("输入非法,请重新输入!")
Menu()
if __name__=="__main__":
main()
from PIL import Image # PIL 是一个 Python 图像处理库
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
# 是我们的字符画所使用的字符集,一共有 70 个字符,字符的种类与数量可以自己根据字符画的效果反复调试的
WIDTH = 60 # 字符画的宽
HEIGHT = 45 # 字符画的高
# 将256灰度映射到70个字符上,也就是RGB值转字符的函数:
def get_char(r, g, b, alpha=256): # alpha透明度
if alpha == 0:
return ' '
length = len(ascii_char)
gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b) # 计算灰度
unit = (256.0 + 1) / length
return ascii_char[int(gray / unit)] # 不同的灰度对应着不同的字符
# 通过灰度来区分色块
if __name__ == '__main__':
img = 'D:/python_file/test2/temp.png' # 图片所在位置
im = Image.open(img)
im = im.resize((WIDTH, HEIGHT), Image.NEAREST)
txt = ""
for i in range(HEIGHT):
for j in range(WIDTH):
txt += get_char(*im.getpixel((j, i))) # im.getpixel返回给定位置的像素值(r g b)。如果图像为多通道,则返回一个元组。获得相应的字符
txt += '\n'
print(txt) # 打印出字符画
# 将字符画 写入文件中
with open("D:/python_file/test2/output.txt", 'w') as f:
f.write(txt)