2020-09-25:Python实验题目与总结

这篇博客详细介绍了Python的学习路径,包括基本输入输出、数据类型、选择和循环结构、字符串处理、函数、类、文件操作及GUI编程。还提供了自主学习任务,如爬虫和数据分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说在前头

import os  # 设置工作路径

# print('默认路径为:'+os.getcwd())      #查看默认路径

# 跳转到当前工作路径为:
from tkinter import CENTER

from pip._vendor.distlib.compat import raw_input

os.chdir(r'C:\Users\17555\Desktop\编写\python代码')  # 更改路径,''里面为更改的路径
# print('跳转到:'+os.getcwd())

# 安装函数库:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名
#           pip install https://www.lfd.uci.edu/~gohlke/pythonlibs/#包名
# 大数据分析需要各种工具和类库,例如Anaconda,其中包括:
#   NumPy	提供高级数学运算功能的基础类库
#   SciPy		专注于工具和算法的可靠类库
#   Sci-kit-learn	面向机器学习的类库
#   Pandas 	包括各种Seris、DataFrame等数据类库
#   Matplotlib	数据可视化工具,简单且有效的数值绘图类库

'''

实验1:Python语言基本输入输出(2学时)

'''
print('*'*10+'菜单'+'*'*10)
print("0:学号  1:名字  2:班级  3:年龄  4:兴趣  5:爱好")
print('*'*25)
d={0:'学号:2018207325000',1:'名字:陈辰晨',2:'班级:18信管',3:'年龄:20岁',4:'兴趣:广泛',5:'爱好:看书,打篮球'}
h=eval(input('输入你想要的答案的代号:'))
print(d[h])

# 法1:
print('社会主义核心价值观:','\n',\
      '富强、民主、文明、和谐','\n',\
      '自由、平等、公正、法治','\n',\
      '爱国、敬业、诚信、友善')
# 法2:
print("""社会主义核心价值观:
 富强、民主、文明、和谐
 自由、平等、公正、法治
 爱国、敬业、诚信、友善""")
'''

"""

实验2:Python语言基本数据类型(4学时)

a=65
print("a=%d,%o,%x\n"%(a,a,a))

f=3.1415926
print('f=%.2f,%3.f,%6.3f\n'%(f,f,f))

s='{0},{1}'.format('hello','world!')
print('s1=%s,长度:%d'%(s,len(s)))
print('s2=%s\n'%(s.replace('w','W')))

list=['北京','上海','广州']
print('list1.',list,',长度:',len(list),',第一个元素:',list[0])
list.append('重庆')
print('list2.',list)
list.insert(1,'深圳')
print('list3.',list)
print('删除末尾的元素',list.pop())
print('list4.',list)
print('删除第二个元素',list.pop(1))
print('list5.',list)
list[0]='香港'
print('list6.',list)
list[1]=['c','python','java']
print('list7.\n',list)

t=('北京','上海','广州')
print('t:',t)
print('t[0]:',t[0][0])
print('首字符串:',t[0][0],t[1][0],t[2][0])

#2.已知字典birthdays={'Alice': 'Apr 9', 'Bob':'Dec 20', 'Betty':'Mar 6'},编写代码输出第一项中的’p’。
birthdays={'Alice': 'Apr 9', 'Bob':'Dec 20', 'Betty':'Mar 6'}
#print('输出Alice中的p:',birthdays['Alice'][1])

#3.设计一个字典,并编写程序,用户输入内容作为键,然后输出字典中该键对应的值,如果用户输入的键不存在,则输出“您输入的键不存在!”
key=input('输入birthdays中的任意一个键:')
#方法1
if key in birthdays.keys():
    print('键%s对应的值为:'%key,birthdays[key])
else:
    print("您输入的键不存在!")
#方法2
print(birthdays.get(key,"您输入的键不存在"))

# 4.设计一个有20个元素的列表,并编写程序,将前10个元素升序排列,后10个元素降序排列,并输出结果。
import random

list1 = []
for i in range(20):
    # 随机产生20个0-30整数
    list1.append(random.randint(0, 30))
print('生成的随机整数列表为:\n', list1)

# 前十和后十个分开储存
list2 = list1[0:10]
list3 = list1[10:20]

# 法1:
# 前十升序排序
list2.sort()
# 后十降序排序
list3.sort()  # 升序
list3.reverse()  # 反向
# 法2:
# list2.sort(reverse=True)

# 列表合并
list1 = list2 + list3
print('排序后的列表为:\n', list1)





'''
1、# random各种使用方法
import random

# 随机生成[0.1)的浮点数
print("random():", random.random())

# [1,3]双闭合区间随机int型数
print("randint(1000, 9999):", random.randint(1,3))

# 随机生成0-20之间的偶数([0,21)左开右闭合区间随机int型数)
print("randrange(0, 21, 2):", random.randrange(0, 21, 2))

# 随机生成0-20之间的浮点数
print("uniform(0, 20):", random.uniform(0, 20))

# 从序列中随机选择一个元素
list_string = ['a', 'b', 'c', 'd', 'e']
print("choice(list):", random.choice(list_string))
print("choice(string):", random.choice('abcd'))

# 对列表元素随机排序
list_number = [1, 2, 3, 4, 5]
random.shuffle(list_number)
print("shuffle(list):", list_number)

# 从指定序列中随机获取指定长度的片断
print("sample(sequence):", random.sample('abcdefg', 2))


2、排序与逆序
(1)sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
语法
    list.sort(cmp=None, key=None, reverse=False)
参数
    cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
    key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象(列表,元组等)中,指定可迭代对象中的一个元素来进行排序。
    reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
返回值
    该方法没有返回值,但是会对列表的对象进行排序,既他是修改列表,而不是创建新的列表。
    不应该是   print(list.sort())

(2)sorted() 函数对所有可迭代的对象进行排序操作。
语法
    sorted(iterable, cmp=None, key=None, reverse=False)
参数说明:
    iterable -- 可迭代对象。
    cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
    key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。(lambda函数)
    reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
返回值
    返回重新排序的列表。


sort 与 sorted 区别:
    sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
    list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的list,而不是在原来的基础上进行的操作。


(3)reverse() 用于反向列表中元素。
返回值
    该方法没有返回值,但是会对列表的元素进行反向排序。
'''






# 5.输入2个非零自然数,输出它们的最大公约数和最小公倍数。(提示:使用math库的gcd方法)。
import math

a = eval(input('a='))
b = eval(input('b='))
m = math.gcd(a, b)
print('最大公约数为%d,最小公倍数%d' % (m, a * b // m))

# 6.自行设计一个元素为数字类型的列表,至少使用两种方法计算所有元素的平均数。(提示:使用numpy库的mean方法)。
import random
import numpy

list1 = []
for i in range(20):
    # 随机产生20个0-30整数
    list1.append(random.randint(0, 30))
print('生成的随机整数列表为:{0}\n\n计算所有元素的平均数'.format(list1))
print('方法1:', numpy.mean(list1))
print('方法2:', sum(list1) / len(list1))

实验3:选择结构程序设计(4学时)

实验3-5代码链接

1.输入一个字符串,然后再输入一个字符,若该字符在字符串中不存在,则将该字符添加到最后,否则,输出“该字符已存在,不必添加!”。


2.求解鸡兔同笼问题。输入鸡兔总数和腿总数,判断是否正确,若正确,输出鸡兔各自数量,否则输出“输入有错!”。
x+y=s1,2x+4y=s2

3.密码登录程序。
要求:输入用户名和密码。设定密码为“Python123”;若密码正确, 如果是男生,则显示“祝贺你, 某某先生,成功登录!”; 如果是女生,则显示“祝贺你, 某某女士,成功登录!”;若密码不正确, 显示“对不起, 密码错误, 无法登录!”。

4.编写程序,实现分段函数计算,如下表所示。
x               y
x < 0           3
0 <= x < 10     √x
10 <= x < 20    ( | x |) / 2
20 <= x          3x

5.根据克莱姆法则,下面的线性方程组 ax+by=e,cx+dy=f 的解为:x=(ed-bf)/(ad-bc) ,  y=(af-ec)/(ad-bc)   编写程序,输入a、b、c、d、e和f,然后输出x和y的结果。如果ad - bc为零,输出“该方程组无解!”。


6.编写程序提示用户输入一个三位整数,然后输出它是否是一个回文数。如果一个数从左向右和从右向左读取是一样的,那么这个数是回文数。例如121就是回文数。

实验4:循环结构程序设计(4学时)

实验3-5代码链接

# 1. 与7相关的数:如果一个正整数,它能被7整除或者它的十进制表示法中某个位数上的数字为7,则称之为与7相关的数。
# 编程输入正整数m,n(m<n),求所有大于等于m并且小于等于n的与7相关的正整数。

# 2.编写程序,生成包含1000个0到100之间的随机整数,并统计每个元素的出现次数。(提示:使用集合。)

# 3.编写程序,输入一个列表的元素(整数)和2个整数作为下标,然后输出列表中介于2个下标之间(包含)的元素组成的子列表。
# 例如用户输入[1,2,3,4,5,6]和2,5,程序输出[3,4,5,6]。

# 4.编写程序,用户从键盘输入小于1000的正整数,输出其因式分解式。
# 例如,10=1×2×5,60=1×2×2×3×5。

# 5.一个三位整数,加上100后是完全平方数,再加上168后,又是完全平方数,求这个数是多少?

# 6.输入一组身高S=s0,s1,s2,…sn-1,输出身高的平均值和标准差。
# 平均值计算公式:m=(∑_(i=0)^(n-1)▒〖s_i)/n〗
# 标准差计算公式:d=√((∑_(i=0)^(n-1)▒〖(s_i-m)^2/(n-1)〗)
s = [155, 157, 167, 188, 198, 178, 166, 156, 185, 174, 173, 159, 166]

实验5:循环结构程序设计(4学时)

实验3-5代码链接

# 1.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。

# 2.机器人从原点(0,0)开始在平面中移动。 机器人可以通过给定的步骤向上(UP),向下(DOWN),向左(LETF)和向右(RIGHT)移动。
# 机器人运动的痕迹见如下示例:
# U 5
# D 3
# L 3
# R 2
# 方向(U、D、L、R)之后的数字是步骤,输入空行表示结束。
# 请编写一个程序来计算一系列运动之后,原点距当前位置的距离(四合五入保留2为小数)。


# 3.输入若干同学的学号、姓名、性别和年龄,学号为空表示输入结束,将每个同学的信息存储在字典中,其中学号为键,姓名、性别和年龄组成元组作为值。
# 例如:
# {"1101":("李明","男",19),"1103":("王芳","女",20),"1108":("张平","男",18)}
# 编程输入同学的信息,存储在字典中,然后输出其中男同学的信息。例如:
# 学号:1101 姓名:李明 性别:男 年龄:19
# 学号:1108 姓名:张平 性别:男 年龄:18


# 4.利用循环语句打印如下图所示的,由*组成的等腰三角形的图案。图案行数由输入的正整数n确定。
#    *
#   ***
#  *****
# *******       2n-1


# 6.某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长人的姓名。
# 这里确保每个输入的日期都是合法的,但不一定是合理的假设已知镇上没有超过200岁的老人,
# 而今天是2020年5月6日,所以超过200岁的生日和未出生的生日都是不合理的,应该被过滤掉。
# 输入要求:输入在第一行给出正整数N,取值在(0, 1000];随后N行,每行给出1个人的姓名
#       (由不超过5个英文字母组成的字符串)、以及按“yyyy/mm/dd”(即年/月/日)格
#        式给出的生日,姓名和生日之间以空格分隔。输入保证最年长和最年轻的人没有并列。
# 输入样例:
# 5
# John 2001/05/12
# Tom 1820/09/06
# Ann 2121/01/30
# James 1820/09/05
# Steve 1967/11/20
# 输出样例:
# 3 Tom John


实验6:字符串结构程序设计(4学时)

实验6-7代码链接

# 1.实现一个简单的加法计算器:输入加法式,输出和。例如:
# 输入:3+2.6
# 输出:3+2.6=5.6


# 2.测试用户输入中是否有敏感词('测试', '非法', '暴力', '话'),如果有的话就把敏感词替换为3个星号***,并输出替换后的结果。


# 3. 编写程序,实现手机号的验证。要求如下
# (1)验证规则:长度必须为11位,前2位是13、15或18,后9位都是数字。运行效果如下(运行两次,分别输入13912345678和11912345678)
# (2)判断该手机号是否正确,如果正确打印输出“正确”,否则输出“错误”


# 4.假设有字符串如下:
# s="Here are some dates and times:
#  2019-09-09 07:30:00
#  2019-10-10 07:25:00
#  2020-01-02 18:40:02"
# 编写程序,提取出字符串中的日期和时间,并按照如下格式输出:
#  2019-09-09 07:30:00
#  2019-10-10 07:25:00
#  2020-01-02 18:40:02


# 5.假设有字符串如下:
# s="Man is the master of his destiny."
# 编写程序,提取出字符串中的单词,并按照每行一个单词的格式输出。


# 6.已知字符串str = 'skdaskerkjsalkj',请统计该字符串中各字母出现的次数。


实验7:函数程序设计(4学时)

实验6-7代码链接

# 1.约数。
# 完成一个名为 getfactors(n) 的函数。它接受一个整数作为参数, 返回它所有约数的列表, 约数包括 1 和它本身。



# 2.阶乘。编写代码,定义一个求阶乘的函数fact(n),要求输入N, 返回 N! 的值。


# 3.Fibonacci数列。
# Fibonacci 数列指的是这样一个数列:1、1、2、3、5、8、13、21、……
# 在数学上,Fibonacci 数列以如下被以递归的方法定义:
# F0=1,F1=1,
# Fn=F(n-1)+F(n-2)(n>=2,n∈N*)。
# 写一个函数fib(n), 给定整数 N ,输出前 N 个 Fibonacci 数字。要求每个5个数。


实验8:类程序设计(2学时)

实验8-9代码链接

# 请把下面的Student对象的gender属性对外隐藏起来,
# 添加get_gender()和set_gender()方法来实现gender属性的获取和修改,并检查参数有效性:
class Student(object):
    def __init__(self, name, gender):    # 构造函数
        self.name = name
        self.__gender = gender

    def get_gender(self):
        return self.__gender

    def set_gender(self, gener):
        self.__gender = gener


def ceshi(bart):
    if bart.get_gender() != 'male':
        print('测试失败!')
    else:
        bart.set_gender('female')
        if bart.get_gender() != 'female':
            print('测试失败!')
        else:
            print('测试成功!')


bart1 = Student('Bart', 'male')
ceshi(bart1)
bart2 = Student('Bart', 'female')
ceshi(bart2)


# 1.请执行以下代码,解释错误原因,并修正错误。
class People(object):


# 2.编写程序,要求如下:
# (1)定义一个类Animal,包含init方法和run方法
# (2)Animal属性包括name和age
# (3)定义run方法,打印输出谁跑的快
# (3)定义一个类Dog,继承Animal,添加新的属性color
# (4)初始化一个Animal实例对象a,a的name为“动物”,age为10
# (5)初始化一个Dog的实例对象d,d的name为“旺财”,age为5,color为black
# (6)调用a的run方法和d的run方法



# 3.编写程序,要求如下:
# 1).自己写一个Student类,此类的对象有属性name, age, score, 用来保存学生的姓名, 年龄, 成绩
# 2) 写一个函数input_student,读入10个学生的信息,用对象来存储这些信息(不用字典),并返回对象的列表
# 3) 写一个函数output_student,输出这些学生信息(格式不限)。

# [[张三,18,79], [李四,18,80], [王二,20,90], [麻子,20,70], [王朝,19,30]
# [陈煌,20,98], [刘浩宇,22,40], [伍兹柳,21,73], [彭孜然,22,59], [李弘基,19,92]]


# 4.编写程序user.py,要求如下
# (1)编写User类,包含用户姓名,性别,密码属性
# (2)编写一个名为login的登录方法,打印输出一行字符串
# "User login success!"
# (3)编写测试代码(放在if__name__ == '__main__'下),创建一个具体实例user对象,然后调用login方法


# 5.编写程序admin.py,要求如下:
# (1)导入模块user中的User类
# (2)编写Admin类继承User类,并添加新的权限角色属性role(127 代表超级管理,126 代表老师,100 代表学生)
# (3)重写login登录方法,打印输出      用户名 + "Admin login success!"
# (4)编写测试代码(放在if __name__ == '__main__'下),创建一个具体实例admin对象,然后调用login方法

实验9:文件操作程序设计(2学时)

实验8-9代码链接

# 1.新建p9_1.py文件,要求如下
# (1)读写star.txt文件
# (2)将如下列数列前20项写入star.txt文件
# (3)关闭文件


# 2.新建p9_2.py,要求如下:
# (1)安装xlrd,xlwt,xlutils库
# (2)读取18生物医学专业.xls文件的Sheet1
# (3)统计全班的成绩平均分
# (4)将统计结果写入表格的63行,学号列写上“总分”,成绩列填入计算的平均分


# 3. 创建文件data.txt,共100000行,每行存放一个1~100之间的随机整数

实验10:GUI

from tkinter import *
from tkinter import messagebox


def surebtn():
    uesr = ['admin', '123456']
    # print(entry1.get().strip())
    if entry1.get().strip() == uesr[0] and entry2.get().strip() == uesr[1]:
        messagebox.showinfo('恭喜', '登陆成功')
    else:
        messagebox.showerror('警告', '用户名或密码错误')


def rebtn():
    entry1.delete(0, END)
    entry2.delete(0, END)


denglu = Tk()  # 登录
denglu.title('登录窗口')
denglu.geometry("250x200")

label1 = Label(denglu, fg="orange", relief="ridge", width=10, text='用户名').grid(row=1, column=1)  # 标签
entry1 = Entry(denglu)
entry1.grid(row=1, column=2)
entry1.insert(0, "请输入用户名")  # 输入框内默认文字

label2 = Label(denglu, fg="orange", relief="ridge", width=10, text='密码').grid(row=2, column=1)
entry2 = Entry(denglu, show="*")
entry2.grid(row=2, column=2)  # 隐藏密码为*
entry2.insert(0, "请输入密码")

Button(denglu, text='确认', width=4, bg='white', fg='blue', command=surebtn).grid(row=5, column=1)
Button(denglu, text='重填', width=4, bg='white', fg='blue', command=rebtn).grid(row=5, column=2)

denglu.mainloop()  # 进入消息循环

自主学习1:爬取百度图片

# 要求:
# 1.根据百度图片库接口url,搜索多页图片链接并下载图片。
#      图片链接用正则表达式表示;接口参数中的搜索关键字、页号和每页图片数用输入参数设置。
# 2.程序中获取图片文件内容后立即存储到指定文件夹中
# 3.独立定义搜索的关键字

'''根据搜索词下载百度图片'''
import re
import urllib
import requests


def get_onepage_urls(onepageurl):
    '''获取单个翻页的所有图片的urls+当前翻页的下一翻页的url'''
    if not onepageurl:
        print('已到最后一页, 结束')
        return [], ''
    try:
        html = requests.get(onepageurl)
        html.encoding = 'utf-8'
        html = html.text
    except Exception as e:
        print(e)
        pic_urls = []
        fanye_url = ''
        return pic_urls, fanye_url
    pic_urls = re.findall('"objURL":"(.*?)",', html, re.S)
    fanye_urls = re.findall(re.compile(r'<a href="(.*)" class="n">下一页</a>'), html, flags=0)
    fanye_url = 'http://image.baidu.com' + fanye_urls[0] if fanye_urls else ''
    return pic_urls, fanye_url


def down_pic(pic_urls):
    '''给出图片链接列表, 下载所有图片'''
    for i, pic_url in enumerate(pic_urls):
        try:
            pic = requests.get(pic_url, timeout=15)
            string = str(i + 1) + '.jpg'
            with open(string, 'wb') as f:
                f.write(pic.content)
                print('成功下载第%s张图片: %s' % (str(i + 1), str(pic_url)))
        except Exception as e:
            print('下载第%s张图片时失败: %s' % (str(i + 1), str(pic_url)))
            print(e)
            continue


if __name__ == '__main__':
    keyword = input('输入查找关键字:')  # 关键词, 改为你想输入的词即可, 相当于在百度图片里搜索一样
    url_init_first = r'http://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1497491098685_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&ctd=1497491098685%5E00_1519X735&word='
    url_init = url_init_first + urllib.parse.quote(keyword, safe='/')
    all_pic_urls = []
    onepage_urls, fanye_url = get_onepage_urls(url_init)
    # all_pic_urls.extend(onepage_urls)

    fanye_count = int(input('输入页数:'))  # 累计翻页数
    n = int(input('输入每页图片数:'))
    n1, page = 0, 0
    while page < fanye_count:
        onepage_urls, fanye_url = get_onepage_urls(fanye_url)
        # print('第页' % str(fanye_count))
        page += 1
        if fanye_url == '' and onepage_urls == []:
            continue

        all_pic_urls.extend(onepage_urls[:n])
        # print(all_pic_urls)

    # print(list(set(all_pic_urls)))
    down_pic(list(set(all_pic_urls)))   # 去重复


'''
1.描述
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

语法
enumerate(sequence, [start=0])

参数
sequence -- 一个序列、迭代器或其他支持迭代对象。
start -- 下标起始位置。

返回值
返回 enumerate(枚举) 对象。

2.描述
extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。

语法
list.extend(seq)

参数
seq -- 元素列表。

返回值
该方法没有返回值,但会在已存在的列表中添加新的列表内容。
'''

自主学习2:利用pandas分析数据

# 随机产生1000000条成绩记录,其中包括Python、Java、C三门课程的成绩,
# 编程统计三个分数段("0-59", "60-84", "85-100")的人数、平均分、方差
import pandas
import numpy
import random

grade_x = {'python': [random.randint(0, 100) for i in range(1, 100001)],
           'java': [random.randint(0, 100) for i in range(1, 100001)],
           'c': [random.randint(0, 100) for i in range(1, 100001)]}
group_grade = {'python': {"0-59": [], "60-84": [], "85-100": []},
               'java': {"0-59": [], "60-84": [], "85-100": []},
               'c': {"0-59": [], "60-84": [], "85-100": []}}
tongji_x = {"0-59": {'人数': 0, '平均分': 0, '方差': 0},
            "60-84": {'人数': 0, '平均分': 0, '方差': 0},
            "85-100": {'人数': 0, '平均分': 0, '方差': 0}}


grade = pandas.DataFrame(grade_x)
group = pandas.DataFrame(group_grade)
tj = pandas.DataFrame(tongji_x)

# print(group)


for key in grade:
    # print(key)  # 课程名
    group[key]["0-59"] = grade[(0 <= grade[key]) & (grade[key] < 60)][[key]]
    #        (0 <= grade[key]) & (grade[key] <= 59)  其中()是必须的,多行索引使用两个中括号:[[x]]
    group[key]["60-84"] = grade[(60 <= grade[key]) & (grade[key] < 85)][[key]]
    group[key]["85-100"] = grade[(85 <= grade[key]) & (grade[key] <= 100)][[key]]

# print(group)

filename = r"随机成绩.txt"  # 首先创建一个 .txt 文件
with open(filename, "w+") as file:  # 用with as 方法打开写入
    file.write(str(grade) + '\n')  # 换行输入到文件中

    for key in group:
        # print(key)  # 课名
        for key1 in tongji_x:
            # print(key1)  # 区间
            tj[key1]["人数"] = group[key][key1].count()  # 人数
            tj[key1]["平均分"] = numpy.mean(group[key][key1])  # 平均分
            tj[key1]["方差"] = numpy.var(group[key][key1])  # 方差

        file.write(str(key) + '\n' + str(tj) + '\n')  # 换行输入到文件中
        print(key, '\n', tj, '\n')








'''
1、利用pandas.cut进行数据离散化切分
pandas.cut(x,bins,right=True,labels=None,retbins=False,precision=3,include_lowest=False)
x:需要切分的数据
bins:切分区域
right : 是否包含右端点默认True,包含
labels:对应标签,用标记来代替返回的bins,若不在该序列中,则返回NaN
retbins:是否返回间距bins
precision:精度
include_lowest:是否包含左端点,默认False,不包含


2、xlwt包对execl表的基本操作
在xlwt中生成的xls文件最多能支持65536行数据,如果写入过多,会报错

通过 xlwt.Workbook() 来新建工作簿;

通过 表名.add_sheet("Sheet名") 来新建sheet;

通过 sheet.write(行号,列号,值) 来一个单元格一个单元格地写入数据,注意,行号和列号均从0开始;

最后,通过 表名.save('文件名') 来保存。


3、read() readline()以及readlines()区别
.read() 每次读取整个文件,它通常将读取到底文件内容放到一个字符串变量中,也就是说 .read() 生成文件内容是一个字符串类型。
.readline()每只读取文件的一行,通常也是读取到的一行内容放到一个字符串变量中,返回str类型。
.readlines()每次按行读取整个文件内容,将读取到的内容放到一个列表中,返回list类型。


4、with用法及原理
with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭/线程中锁的自动获取和释放等。

'''

自主学习3:数据库编程

'''
Access库student.mdb中表student内容如下:
sid     sname   sex   class
S0017 	王萍 	女 	软件工程 	
S0018 	李明 	男 	软件工程 	
S0019 	顾于 	女 	软件工程 	
S0020 	张胜 	男 	计算机科学
S0021 	宋佳 	男 	计算机科学
S0022 	谢芳 	女 	计算机科学
如有不一致的数据,请修改。
编程:
(1)增加记录:S0023 	好好 	女 软件工程
(2)增加记录:S0024 	好好 	男 计算机科学
(3)修改	:顾于的sdept为计算机科学
(4)删除:sno为S0024的记录
(5)输出所有男生记录
(6)输出sdept为软件工程的女生记录

由于当时电脑原因,当时建库建表使用的是SQL Server2019,所以如果不能运行的话,具体的数据库连接这块需要自己查查资料(数据库配置修改在函数 sql_connect() 里)
'''
import pyodbc


def sql_connect():  # 数据库的连接,需要自己配置数据库,我自己当时使用的是SQL Server2019

    driver = '{SQL Server}'
    server = 'localhost'
    user = 'sa'
    password = '123456'
    database = 'XSCJGL'

    # 连接数据库
    conn = pyodbc.connect(
        'DRIVER=' + driver + ';SERVER=' + server + ';DATABASE=' + database + ';UID=' + user + ';PWD=' + password)
    # autocommit=True,    # 如果插入数据,是否自动提交? 和conn.commit()功能一致。

    # 获得游标。
    cursor = conn.cursor()
    return conn, cursor


def InsertData(data, conn, cursor):  # 增
    sql = "INSERT INTO student(sno,sname,ssex,sdept) VALUES (?, ?, ?, ?)"
    cursor.executemany(sql, data)
    conn.commit()


def DeleteData(sql, conn, cursor):  # 删
    cursor.execute(sql)
    conn.commit()


def UpdateData(sql, conn, cursor):  # 改
    cursor.execute(sql)
    conn.commit()


def SelectTable(sql, cursor):  # 查
    cursor.execute(sql)
    row = cursor.fetchone()
    while row:
        print("sid=%s, sname=%s, sex=%s, class=%s" % (row[0], row[1], row[2], row[4]))
        row = cursor.fetchone()


if __name__ == '__main__':
    conn, cursor = sql_connect()
    print('初始表:')
    sql = "select * from student where sdept in ('软件工程','计算机科学')"
    SelectTable(sql, cursor)
    print()

    print('(1,2)增')
    data = (('S0023', '好好', '女', '软件工程'), ('S0024', '好好', '男', '计算机科学'))
    InsertData(data, conn, cursor)
    SelectTable(sql, cursor)
    print()

    print('(3)改')
    sql1 = "update student set sdept='计算机科学' where sname='顾于'"
    UpdateData(sql1, conn, cursor)
    sql2 = "select * from student where sname='顾于'"
    SelectTable(sql2, cursor)
    print()

    print('(4)删')
    sql3 = "delete from student where sno='s0024'"
    DeleteData(sql3, conn, cursor)
    SelectTable(sql, cursor)
    print()

    print('(5,6)查')
    sql4 = "select * from student where ssex='男' and sdept in ('软件工程','计算机科学')"
    sql5 = "select * from student where ssex='女' and sdept='软件工程'"
    SelectTable(sql4, cursor)
    print()
    SelectTable(sql5, cursor)

    conn.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

陈晨辰熟稳重

让我看看是哪个靓仔支持了我!

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

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

打赏作者

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

抵扣说明:

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

余额充值