说在前头
import os
from tkinter import CENTER
from pip._vendor.distlib.compat import raw_input
os.chdir(r'C:\Users\17555\Desktop\编写\python代码')
'''
实验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])
birthdays={'Alice': 'Apr 9', 'Bob':'Dec 20', 'Betty':'Mar 6'}
key=input('输入birthdays中的任意一个键:')
if key in birthdays.keys():
print('键%s对应的值为:'%key,birthdays[key])
else:
print("您输入的键不存在!")
print(birthdays.get(key,"您输入的键不存在"))
import random
list1 = []
for i in range(20):
list1.append(random.randint(0, 30))
print('生成的随机整数列表为:\n', list1)
list2 = list1[0:10]
list3 = list1[10:20]
list2.sort()
list3.sort()
list3.reverse()
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() 用于反向列表中元素。
返回值
该方法没有返回值,但是会对列表的元素进行反向排序。
'''
import math
a = eval(input('a='))
b = eval(input('b='))
m = math.gcd(a, b)
print('最大公约数为%d,最小公倍数%d' % (m, a * b // m))
import random
import numpy
list1 = []
for i in range(20):
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代码链接
实验6:字符串结构程序设计(4学时)
实验6-7代码链接
实验7:函数程序设计(4学时)
实验6-7代码链接
实验8:类程序设计(2学时)
实验8-9代码链接
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)
class People(object):
实验9:文件操作程序设计(2学时)
实验8-9代码链接
实验10:GUI
from tkinter import *
from tkinter import messagebox
def surebtn():
uesr = ['admin', '123456']
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:爬取百度图片
'''根据搜索词下载百度图片'''
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)
fanye_count = int(input('输入页数:'))
n = int(input('输入每页图片数:'))
n1, page = 0, 0
while page < fanye_count:
onepage_urls, fanye_url = get_onepage_urls(fanye_url)
page += 1
if fanye_url == '' and onepage_urls == []:
continue
all_pic_urls.extend(onepage_urls[:n])
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分析数据
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)
for key in grade:
group[key]["0-59"] = grade[(0 <= grade[key]) & (grade[key] < 60)][[key]]
group[key]["60-84"] = grade[(60 <= grade[key]) & (grade[key] < 85)][[key]]
group[key]["85-100"] = grade[(85 <= grade[key]) & (grade[key] <= 100)][[key]]
filename = r"随机成绩.txt"
with open(filename, "w+") as file:
file.write(str(grade) + '\n')
for key in group:
for key1 in tongji_x:
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():
driver = '{SQL Server}'
server = 'localhost'
user = 'sa'
password = '123456'
database = 'XSCJGL'
conn = pyodbc.connect(
'DRIVER=' + driver + ';SERVER=' + server + ';DATABASE=' + database + ';UID=' + user + ';PWD=' + password)
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()