现在自己学python 先练题 讲自己遇到的问题记录一下
# #BMI=体重/(身高**2) # userh=float(input('请输入你的身高(cm):')) # userw=float(input('请输入你的体重(kg)')) # userbim=userw/userh**2 # print("您的BIM值为:"+str(userbim)) # # if userbim<=18.5: # print("偏瘦") # elif 18.5<userbim<=25: # print('正常') # elif 25<userbim<=30: # print('偏胖') # else: # print('肥胖') # ______________________________________________________________________________________ # and or not 分别是与 或 非 优先级分别为 not and or # —————————————————————————————————————————————————————————————————————————————— #list是一个列表 操作要点 :1.可以存很多不同变量的数 2.给它增加删除分别是 .append .remove #3.列表是可变的以不变的字符串为例子 如果给字符出都大写可以用 .upper的方法 但需要重新赋值一下 列表是可变的 就口语直接改 #方法和函数是不同的,方法一般是在操作对象后面加点 入list.append 对象.方法名(...) 函数是 函数名(操作对象) # shop_list=["键盘","鼠标"] # shop_list.append('平板') # print(shop_list) # shop_list.remove('键盘') # print(shop_list) # shop_list.append(True) # shop_list.append(66.6) # shop_list.append(None) #!!!!注意这里不同的python的列表里能存放不同类型的数 # print(shop_list) # #列表和字符串一样都可以用len函数求出长度::: # worinima="woaini" # l1=len(shop_list) # l2=len(worinima) # print(l1,l2) #列表和数组一样是从0开始的 也有很多函数 # num_list=[1,13.-7,2,96] # print(max(num_list))#输出列表中的最大数 # print(min(num_list)) # print(sorted(num_list))##!!!!!排序 # num_list[1]='我日'#替换掉第一个数 # print(num_list[1]) #打印第一个数 #------------------------------------------------------------------------ #数据结构字典:键 : 值(key:value) #contacts={"小明":“2000”, # “小花”:“2001” } 要获取某个值的话 contrast["小明"] #如果有三个小明 就要区分 这里想到了用列表 但列表是可变的 所以用元组 tuple!!!! 如type=('键帽',‘显示器’) #因为元组是不可变的所以对于列表的插入删除操作元组都做不了 但能分开表示不同的小明 #!!!contacts={”type("小明",1)“:“2000”,”type("小明",2)“:“2111”,”type("小明",3)“:“2000” # “小花”:“2001” } #字典增加操作:contrast[”美女a“]=”10086“,如果已经存在美女a就会把以前的值覆盖掉 #判断该键是否存在: ”小明“ in contracts 就会返回一个布尔值 #删除该建: del contracts["小明"] 这样就会删除了这个建 #.keys()返回所有建 .values() 返回所有值 .items()返回所有键值对 # 判断有多少建 len(contracts) 和上面的求列表和字符串长的的方法相同 在for循环时建和值被赋值为元组 #练习:结合input 、字典、if判断、做一个查询流行语含义的电子词典程序 # zidian={"觉醒年代":"是一个很牛逼的电视剧", # "yyds":"永远的神的拼音缩写"} # zidian["双减"]="减轻学生压力" # print(zidian) # cha=input("请输入您要查询的词典语句") # if cha in zidian: # print("您查询的词语:"+cha +"含义如下"+zidian[cha]) # else: # print("不存在该词") # print("当前字典收录词条为:"+str(len(zidian))+"条")# #!!!!!!!! 用for循环进行迭代处理 比如:列表 字典 字符串1 # for 变量名 in 可迭代对象 # 每一个变量要做的事 #range的介绍 range(5,10,2)表示从5 增加到10 每次跨度为2 10不在范围里 且跨度为1时可省略 #!!!给一点列表 检查每个体温数字 大于38就处理 # tiwen=[36.4,35.2,39,34] # for tmp in tiwen: #这里的过程是tmp依次赋值为列表里的数 然后被依次处理 # if tmp>38: # # print(str(tmp)+"感冒了") #!!!!!!!!下面是对字典的处理 注意 for循环时候 字典的建和值被当作 元组存储 tuple # # tmpdict={"111":36.5,"112":39.5,"113":30} # for gh,tmpe in tmpdict.items():#这里字典.items表示返回所有键对 # if tmpe>38: # print(gh) # #计算从1-100的和 利用range # total=0 # for i in range(1,101,1): # total=i+total # print(total) ##现在介绍while循环 whille 条件A: 条件为真就一直执行 # 行动B #练习打印下面的列表 # list1=["你","好","吗","哥"] # #第一种用for循环 # for i in list1: # print(i) # #第二种 从个数开始 # for i in range(0,len(list1)): # print(list1[i]+"\n") # # #第三种 用while循环 # i=0 # while i<(len(list1)): # print(list1[i]) # i=i+1 #例题:用户可以输入任何数字 然后以q结尾 这时就要记录平均值输出 # print("请输入你要输入的数字\n") # #我想着的用一个列表记录所输入的数字 # list2=[] #!!!!注意这个空列表的建立 # while True: #!!!!注意这个循环的思路 我当时没想到 # f=input("请输入") # if f=='q': # break # else: # list2.append(f) # # #得到输入的数之后 就要求平均值 设置一个for循环求总数 然后除以长度 # i=0 # sum=0 # for i in range(len(list2)):##!!!!!!!注意迭代这里出现了问题 忘记使用range了 # sum=sum+int(list2[i]) # sum=sum/len(list2) # print("平均值为:"+str(sum))#!!!注意字符串和浮点型不能同时使用 #把自己的思路修改一下: # print("下面是一个求用户输入平均值的算法 输入q时结束") # user=input("请输入第一个要输入的数") # count=0 # sum=0 # while user!='q': # count=count+1 # sum=sum+float(user) # user=input("请输入要输入的数") # # average=sum/count # print("您所输入的数的平均值为:"+str(average)) #!!!!!!!!!!!!!!!!!优雅的发送短信 “”“几级{0}几级{1}""".format(年,月) 里的0 1就表示用format(年,月)的哪一个数字 #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! #函数: def 函数的名字(传入的参数): 调用是直接将参数调用到里面 #下面时计算扇形面积的函数 # def shanxinmianji(jiaodu,banjin): # mianji=jiaodu/360*3.14*banjin**2 # print("此扇形的面积是:"+str(mianji)) # # shanxinmianji(40,50) #练习 设计一函数 计算bim # def calculate_BIM(high,weight): # BIM=weight/(high**2) # print(f"您的BIM为:{BIM}") # # if BIM<=18.5: # fenlei="偏瘦" # elif 18.5<BIM<=25: # fenlei="正常" # elif 25<BIM<=30: # fenlei="偏胖" # else: # fenlei="肥胖" # print(f"您的分类为:{fenlei}") # return BIM # # high=float(input("请输入你的身高")) # weight=float(input("请输入你的体重")) # BIM=calculate_BIM(high,weight) #s下面来学习类class #class 类名字(一般情况是第一个首字母大写): # def _init_(self,颜色,位置,卧室数 后面添加各种你要加入的属性) # self.颜色 # self.位置 # self.卧室数 #定义一个类的代码 # class CuteCat: # def __init__(self,name="yaunyaun"):##括号里可以表示任意数量的参数 第一个参数是被占用的 用来表示对象本身 # self.name=name # cat1=CuteCat() # print(cat1.name) # class CuteCat: #通过class可以创建一个类 # def __init__ (self,cat_name,cat_age,cat_color):#通过init函数来表示类有哪些属性 # self.name=cat_name # self.age=cat_age # self.color=cat_color # ##接下来定义对象拥有的方法 # def speak(self): ##用self帮助我们在方法里去获取和修改对象绑定的属性 # print("喵"*self.age) #年龄几岁喵几次 实现了根据属性的不同 实现方法调用结果 # def think(self,content): # print(f"小猫{self.name}思考{content}") # cat1=CuteCat("yuanyaun",3,"橙黄色") # print(f"小猫{cat1.name}今年{cat1.age}岁,花色是{cat1.color}") # cat1.speak() # cat1.think("柴家") #下面是一个练习 #定义一个学生类 #要求:1 属性包含姓名 学号 以及语数英三颗的成绩 #2.能设置学生某科的成绩 #3 能打印出该学生所有科目的成绩 #对于这个练习的总结:1.要记得对字典的操作 这里吧语数英都存入了一个字典里 2 要注意变量和self定义的时候 #3.其实感觉和结构体差不多 对象的定义就是申明了一个结构体 而功能就是给这些建立的结构体增加了不同的操作 # class Xueshen: # def __init__(self,xue_name,xue_number,gardes={"语文":0,"数学":0,"英语":0}): # self.name=xue_name #为什么要进行这一步 就是为了表明这个变量是绑定到对象上的属性 # self.number=xue_number # self.gardes=gardes #h或者上面变量没有 来一个 self.grades={"语文":0,"数学":0,"英语":0} 这样的效果是一样的 # # def set_grade(self,course,grade): # if course in self.gardes: #如果course是字典里的键 就进行修改 # self.gardes[course]=grade # else: # return # # def daying(self): # print(f"该学生的语数英成绩分别是:{self.gardes}") # def print_grades(self): #!!!!!!!!!!!!!!!!!!!!注意这个函数的操作 如果将字典里的数用for循环打印出来 # print(f"学生{self.name} 学号:{self.number}的成绩为") # for course in self.gardes: # print(f"{course}的分数为:{self.gardes[course]}分") # xiaoming=Xueshen("小明",10086,) # xiaoming.daying() # xiaoming.set_grade("英语",60) # xiaoming.set_grade("语文",70) # xiaoming.set_grade("数学",30) # xiaoming.daying() # xiaoming.print_grades() #____________________________________________________________________________ #下面介绍类继承 就是猫和人都可以定义再一个父内里有(名字,性别) 两个方法:呼吸和拉屎 #再定义子类后 对于父类(名字,性别)的继承就用:super().__init__(名字,性别) #对于方法 可以在子类下面定义方法 运行时先在子类中找对应方法 没有的话在父内里找对应方法 # class Dongwu: # def __init__(self,name,sex): # self.name=name # self.sex=sex # def breath(self): # print(self.name+"在呼吸") # def poop(self): # print(self.name + "在拉屎") # #下面是两个子类 # class Human(Dongwu): # def __init__(self,name,sex): # super().__init__(name,sex) # self.hastail=False # def read(self): # print(self.name + "在阅读") # class Cat(Dongwu): # def __init__(self, name, sex): # super().__init__(name, sex) # self.hastail = True # def zhuashafa(self): # print(self.name + "抓沙发") # # # # xiaoming=Human("小明","男") # xiaoming.read() # xiaoming.poop() # xiaoming.breath() #;例字:类继承练习:人力系统 #员工分为两类:全职 员工Fulltimeemployee 兼职员工 Parttimeemployee #全职和兼职都有 姓名 name 工号 id 两个属性 #全具备打印信息的方法print_info(打印姓名、工号)方法 #全职具有月薪 monthly_salary属性 #兼职具有 日新 daily_salary属性 每月工作天数work_adys属性 #全职和兼职都具有计算月薪 calculate_monthly_pay的方法,但具体计算过程不一样 # # class Employee: # def __init__(self,name,id): # self.name=name # self.id=id # def print_info(self): # print(self.name + ' ' + self.id) # # #全职字类 # class Fulltimeemployee(Employee): # def __init__(self,name,id,monthly_salary): # super().__init__(name,id) # self.monthly_salary=monthly_salary # def calculate_monthly_pay(self): # print(f"全职员工月薪是:{self.monthly_salary}") # #兼职员工 # class Parttimeemployee(Employee): # def __init__(self,name,id,daily_salary,work_adys): # super().__init__(name,id) # self.daily_salary=daily_salary # self.work_adys=work_adys # # def calculate_monthly_pay(self): # money=self.daily_salary*self.work_adys # print(f"这个兼职员工的工资是:{money}") # # xiaoming=Employee("小明","100") # xiaoming.print_info() # # erhao=Fulltimeemployee("小荤","101",5000) # erhao.print_info() # erhao.calculate_monthly_pay() # # sanhao=Parttimeemployee("小白","102",5,200) # sanhao.print_info() # sanhao.calculate_monthly_pay() #python对文件的操作 open("文件的路径","模式(r读取模式,w写入模式)",encoding="utf-8"这里说的是编码方式) # f=open("F:\Desktop\新建 文本文档.txt","r",encoding="utf-8") # # print(f.read())# 程序会记录读到哪个地方了 并记录 # # print(f.read()) #会读空字符串,并打印 !!!在文件特别大的别调用read容易占过多的内存 # print(f.read(10)) #这里会读1-10节的内容 # print(f.read(10)) #这里会读11-20字节的内容 # print(f.readline())#只会读一行的内容,并打印 # #下面是每次读一行 为空就不读了 # line =f.readline()#读第一行 # while line!="": # print(line) # line = f.readline() # 读下一行 # print(f.readlines())#这里是会读取全部内容 并且把每行作为列表元素返回 # f.close()#关闭文件释放资源 # # f=open("./data.txt","r",encoding="utf-8")#这里用的是相对路径 # conent=f.read() # print(conent) # f.close() # # #或者 # # with open("./data.txt","r",encoding="utf-8") as f: #这里用的是相对路径 # conent=f.read() # print(conent) #下面介绍写操作 # with open("./data.txt","a",encoding="utf-8") as f: #这里只支持写 如果要读的话可以用r+ # f.write("hellow") # f.write("yopood") #注意这里 write和read不一样 不会换行 # # with open("./data.txt","r+",encoding="utf-8") as f: # print(f.read()) # f.write("hellow!") ##下面介绍程序异常处理 #捕捉异常 就是用try 和except 捕捉异常 如果发生了预估的异常就在后面输出 #或者在最后加一个except 这个语句会捕捉所有的错误类型 # try: # user=float(input("请输入你的体重")) # userl=float(input("请输入你的升高")) # userbim=user/userl**2 # except ValueError: # print("输入的数为不合理数字,请重新运行程序,并输入正确的数字") # # except: # print("发生了未知错误 请重新运行程序") # else: # print("您的bim值为"+str(userbim)) #不发生错误时才会运行 # finally: # print("程序结束运行") #不管是否发生错误 都会运行 #assert语句 后面可以跟各种表达式 也就是值为true 和 false表达式 如果求值为true继续运行 如果是false #就会发生 assertionerror 这个错误 这时候后面的就不运行了 不知道剩下的代码 #unittest 函数库满足了一直测试的功能 就在开一个测试的项目 #比如有个加法函数 测试用例 把这个函数引入 #实现代码: #def myadder(x,y): # return x+y #!!!!!这个下面就是测试的 如果他们处于同一文件当中 就用form # import unittest # from 文件名 import 要测试的函数名字 # class Test(unittest.TestCase): #test是testcase的子类 在这个类下面可以定义不同的测试用例 # def test_.......(self): #这里的测试用例函数必须以test下划线开头 # # !!!!!!!!!!!!!!!!!!!!!!!写完之后在终端运行 python-m unittest 这样就会自动搜索 # 继承了TastCase的子类的 运行他们所有以test_开头的方法 然后展示测试结果 #unittest.TestCase常见的测试方法 # assertEqual(a,b)判断两个是否相同 # assertTrue(a)类似于 assert a is true # assertln(a,b) assert a in b # #下面是例子 初始化购物清单 shoppling_list 是字典类型 包含商品名字和对应价格 # class Shopplist: # # """shopplist 是字典类型 包含商品名字和对应的价格""" # def __init__(self,shopp_list): # self.shopp_list=shopp_list # #"""返回购物清单上有多少商品""" # def get_item_count(self): # return len(self.shopp_list) # #"""返回购物清单商品价格总额数字""" # def get_total_price(self): # total_price=0 # for price in self.shopp_list.values(): # total_price=total_price+price # return total_price # # # # # #!!!!!!!!!!!!!!!!!!!!!!!!下面是测试代码 # import unittest # from hellow import Shopplist # # class Testshopple(unittest.TestCase): # def setUp(self):##这里定义了一个测试对象 所以使用setup的方法来提前定义好 就和类一样 # self.shopp_list=Shopplist({"纸巾": 8, "帽子": 30, "拖鞋": 15})##这里的Shopplist是类 要和上面一致 # # #下面是两个测试用例 记得要以test开头 # def test_get_item_count(self): # # self.assertEqual(self.shopp_list.get_item_count(),3) # # # def test_get_total_price(self): # # self.assertEqual(self.shopp_list.get_total_price(), 55)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
下面是对题目的练习:
#第一题 输出两数之和 # a=int(input("请输入第一个数")) # b=int(input("请输入第二个数")) # print(a+b) #————————————第二题 找出100以内的偶数 #思路 从1-100如果能让2除完 就代表是偶数 就输出 # a=100 # for i in range(0,101,1): # if (i%2)==0: #!!!!注意这里的 %是取余用算 /是取模运算 # print(str(i)+"是偶数") #———————————————————————找出100以内的奇数、 # for i in range(1,101,1): # if (i%2)!=0: #!!!!注意这里的 %是取余用算 /是取模运算 # print(str(i)+"是奇数") ##------第三题 判断是否是素数 # i=int(input("请输入第入一个数")) # p=3 # for s in range(2,i+1,1): # if i%s==0: # p=2 # print(f"该{i}数不是素数") # break # if p==3: # print(f"该数{i}是素数") #___________________________第三题:求出某个自然数的阶乘 0的阶是1 # a=int(input("请输入所要求的数")) # sum=1 # if a==0: # print(f"{a}的阶乘是1") # else: # for i in range(1,a+1): # sum=i*sum # # print(f"{a}的阶乘是{sum}") #方法二 用递归 函数的自我调用 # def jiecheng(n): # if n-1==0: # return 1 # else: # return n*jiecheng(n-1) # # # # # a=int(input("请输入你要求的数:")) # sum=jiecheng(a) # print(sum) # #_______________________第6题 求圆的周长 编写程序输入半径 求出周长 求出圆的面积 # r=int(input("请输入半径")) # print(f"该圆的周长是{2*3.14*r}") # # # print(f"该圆的面积是{3.14*r**2}") #_______________________第8题 求直角三角形斜边长 a平方+b平方=c平方 matf.sqrt这个函数是求平方的 # import math # a=int(input("请输入第一直角边长")) # b=int(input("请输入第二直角边长")) # # c=(int(a)**2+int(b)**2)**(0.5) # c=a*a+b*b # c=math.sqrt(c) # print(c) #_______________________第9题 输入三个数 按从小到大输出三个数 # a=int(input("请输入第一个数:")) # b=int(input("请输入第二个数:")) # c=int(input("请输入第三个数:")) # list1=[a,b,c] # list1.sort() # for i in list1: # print(i) #_______________________第10题 输入整数 a b表示一个闭区间 找到所有素数并达英 # def sushu(i): # p=3 # for s in range(2,i+1,1): # if i%s==0: # p=2 # break # if p==3: # print(i) # # # a=int(input("请输入第一个区间的数")) # b=int(input("请输入第二个区间的数")) # for l in range(a,b+1,1): # sushu(l) #________不会!@!!!!!!!_______________第11题 有四个数字 1.2.3.4 能组成多少个互不相同 且无重复数字的三位数 哥是多少 ##两个条件 互不相同 且不重复 三层for循环 !!!注意对列表的操作 x=list() 是建立一个列表 # x=list() # sum=0 # for i in range(1,5): # for j in range(1,5): # for k in range(1, 5): # if i!=j and i!=k and j!= k: # m=(1*100+j*10+k) # x.append(m) # sum=sum+1 # print(x) # print(sum) #-------------------------打印乘法口诀表 就是对每一个阶乘 和 它对应的数输出 #我想的这个不能 显示正确的表 # def daying(n): # if n==1: # print("1*1=1") # else: # for k in range(1,n+1): # print(f"{n}*{k}={k*n}") # # # for i in range(1,4): # daying(i) #!!!思路 讲行列分开处理 #end的作用就是告诉print 它自带的换行用end里面的数代替 # for i in range(1,10): # for j in range(1,i+1): #第一行 一个公式 第二行两个 第三行三个 所以每一行有多少列 取决于是哪一行 # print(f"{i}*{j}={i*j}",end=" ") # print()
找出水仙花数:
#-------------------------水仙花数 找出所有的水仙花数(是一个三位数 个数字立方和等于该数本身)
#下面讲这个数的每一个数都存如列表当中
# def panduan(a):
# b=a
#
# list=[]
# while b/10!=0:
# list.append(b%10)
# b=b//10
# sum=0
# for c in list:
# sum=c*c*c+sum
#
# if sum==a:
# print(a)
#
#
# #___输出所有三位数的水仙花数
# for i in range(100,1000):
# panduan(i)
#______________也要注意一个操作就是 讲输入的整数转换成字符,在上面操作但当中也没必要一个个加入列表 这是c语言时候的思想 在这里可以直接转成字符
#再从字符转成列表
def panduan(a):
list1=[]
b = str(a)
list1=list(b) # !!!!!!!!!!!!你看这里就节约了好多时间
sum=0
for c in list1:
sum=int(c)*int(c)*int(c)+sum
if sum==a:
print(a)
#___输出所有三位数的水仙花数
for i in range(100,1000):
panduan(i)