当前位置: 首页 > 后端技术 > Python

Python学习:基础练习

时间:2023-03-26 17:30:17 Python

1.输出0到100的数字,如果数字是3的倍数,输出Fizz,5的倍数输出Buzz。如果同时是3和5的倍数则输出FizzBu??zz,否则打印原来的数字foriinrange(100):ifi==0:print(i)elifi%3==0andi%5==0:print("FizzBu??zz")elifi%3==0:print("Fizz")elifi%5==0:print("Buzz")else:print(i)ps:条件语句是顺序执行,满足第一个条件后的下一个条件不执行。所以同时满足3和5的需求,放在上面。2、根据输入的数字,打印对应层数的等腰三角形星塔。然后打印星星,星星的个数:当前楼层数*2-1num=int(input("请输入一个数字:"))foriinrange(1,num+1):#外层循环定义了星塔的楼层数y=num-i#计算要打印的空格数print(""*y,end="")#打印空行forjinrange(1,2*i):#每行的星数print("*",end="")print()比如range(1,7),生成的序列是1到6,所以层数需要通过num+来控制1换行2*i是星星的数量,使用range()自动减一。-、使用while循环实现num=int(input("请输入一个数字:"))row=1whilerow<=num:print(""*(num-row)+"*"*(2*row-1))row+=1row是层数,默认是第一层可以组成不同且不同的重复三位数list=[]sum=0foriinrange(1,5):forjinrange(1,5):forkinrange(1,5):ifi!=jandj!=kandk!=i:num=i*100+j*10+klist.append(num)sum+=1print(list)print(sum)这三个数可以填十位和数百组成所有排列然后删除重复4.递归返回无值defget_op():str=input("Pleaseenteryourchoice1/2/3/4:")try:no=int(str)ifnonotin[1,2,3,4]:print("Pleaseenterthecorrectoperator")get_op()#这里要在前面加上returnelse:returnnoexceptValueErrorasf:print("Pleaseenterthecorrectoperator")get_op()#这之前应该有returnoperator=get_op()print(operator)outputPleaseenteryourchoice1/2/3/4:aPleaseenterthecorrectoperatorPleaseenteryourchoice1/2/3/4:11Pleaseenterthecorrectoperator请输入您的选择1/2/3/4:1None做下面这道题的时候,如果我直接输入1到4没有问题,但是如果输入的不是数字,还是不是1到4该数字将返回None值。查了很多,发现这样写递归调用后生成的值并没有返回,必须在递归函数调用前加上return。逐层传值。defget_op():str=input("Pleaseenteryourchoice1/2/3/4:")try:no=int(str)ifnonotin[1,2,3,4]:print("Pleaseenterthecorrectoperator")returnget_op()else:returnnoexceptValueErrorasf:print("Pleaseenterthecorrectoperator")returnget_op()operator=get_op()print(operator)output请输入你的Choose1/2/3/4:aPleaseenterthecorrectoperatorPleaseenteryourchoice1/2/3/4:22PleaseenterthecorrectoperatorPleaseenteryourchoice1/2/3/4:225编写程序提示“选择操作员”。输入“1/2/3/4”后,继续输入要计算的两个数,打印出计算结果defadd(n1,n2):value=n1+n2print("%d+%d=%d"%(n1,n2,value))defminus(n1,n2):value=n1-n2print("%d-%d=%d"%(n1,n2,value))defmultiply(n1,n2):value=n1*n2print("%d*%d=%d"%(n1,n2,value))defdivide(n1,n2):value=n1/n2print("%d/%d=%d"%(n1,n2,value))dict={1:add,2:minus,3:multiply,4:divide}defget_op():str=input("请输入你的选择1/2/3/4:")try:no=int(str)ifnonotindict:print("Pleaseenterthecorrectoperator")returnget_op()#return必须是递归的,否则返回值不是别的:returnnoexceptValueErrorasf:print("Pleaseenterthecorrectoperator")returnget_op()defget_num1():str=input("请输入第一个数字:")try:num=int(str)returnnumexceptValueErrorasf:print("Pleaseenteraninteger")returnget_num1()defget_num2():str=input("请输入第二个数字:")try:num=int(str)returnnumexceptValueErrorasf:print("Pleaseenteraninteger")returnget_num1()print("Selectoperation:\n1is+\n2is-\n3is*\n4is/")operator=get_op()num1=get_num1()num2=get_num2()dict[operator](num1,num2)ps:这个搞了好久,一个是递归返回值另一个问题是通过字典存储函数指针。为了减少代码量,前四个函数分别是加减乘除,然后存储在字段中,然后以字典名[key](函数参数)的形式调用。不需要写很多判断代码。6.冒泡排序,数组之间的相邻值成对比较。然后从大到小,或者从小到大排序'''学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441,寻找志同道合的小伙伴互相帮助。群里还有不错的视频学习教程和PDF电子书!'''ls=[7,12,34,4,24,20,11]foriinrange(len(ls)-1):#外层决定比较的轮次forjinrange(len(ls)-1-i):#Howmanynumberstocompareinpairsifls[j]issortedfromsmalltolargels[j],ls[j+1]=ls[j+1],ls[j]#交换位置print(ls)输出[34,24,20,12,11,7,4]数组的下标从0开始,从大到小排序就是找最小的放在最后,从小到大排序就是找最大的放在最后。ps:上图以从大到小排序为例。第一轮是比较7个数,然后比较最小的值放在最后。然后第二轮比较前6个值。等等。当还剩2个数时,比较一下子结束。所以需要比较的轮次是数组的长度减1。每一轮需要比较的次数。第一轮是数组的长度,之后每轮减1.7。二分查询,查询一个有序数组,从数组中间取一个值,与要查询的值进行比较。如果大于要查询的值,则取左半继续二分查询。如果小于要查询的值,取右半继续二分查询。如果它们相同,则给出下标。没有提示也没有发现。使用循环实现ls=[10,20,30]defbinary_search(alist,item):left=0#下标的最小值right=len(alist)-1#下标的最大值whileleft<=right:#必须有=,否则查询不到数组的第一项或最后一项numb=int((left+right)/2)#中间值的下标ifitem==alist[numb]:#等于直接返回下标returnnumbelifitem>alist[numb]:#查询的值大于数组的中间值left=numb+1#updateintervalsubscriptelse:right=numb-1#updateintervalsubscriptreturnNones=binary_search(ls,20)print(s)左右判断数组的下标区间,找到中间值,比较大小,按升序或降序排序。判断是替换左边还是右边的下标。必须是<=因为当数组最小或者最大时,left=rightleft必须是+1,否则会导致在查询数组最大时取中间值下标这一步死循环使用递归实现ls=[10,20,30]defbinary_search(alist,item,left,right):如果左>右:返回无numb=int((left+right)/2)如果alist[numb]==item:返回numbelifitem>alist[numb]:returnbinary_search(alist,item,numb+1,right)else:returnbinary_search(alist,item,left,numb-1)s=binary_search(ls,10,0,3)print(小)