python基础练习题 02
2019-03-13 20:27
323 查看
版权声明:未经原作者允许不得转载本文内容,否则将视为侵权 https://blog.csdn.net/springhammer/article/details/88540558
python基础练习题 02
2.1 递归打印字符
利用递归函数调用方式,将所输入的N个字符,以相反顺序打印出来。
代码:
#定义一个字符串,等待用户输入 string =(input("请输入一个字符串 :")) #定义一个变量 def f(x): if x == -1: #当变量的长度是-1时,返回 return '' else: #否则返回字符串的位置向后移1位,直到变量的长度为-1 return string[x] + f(x-1) print (f(len(string)- 1))
结果:
2.2 利用函数求素数
利用函数调用求1到100之内的素数。(程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数)
代码:
import math def IsPrime(Num): if Num ==1: return False for n in range(2,int(math.sqrt(Num))+1): if Num%n==0: return False else: return True oList = [] for i in range(1,101): if IsPrime(i)==True: oList.append(i) else: print (oList)
结果:
2.3 数的排序
有一个已经排好序的数的序列(从小到大),现输入一个数,要求按原来的规律将它插入序列中。
代码:
l = [0,10,20,30,40,50] print( '排序数列为:',l) cnt = len(l) n = int(input('插入一个数:')) l.append(n) for i in range(cnt): if n<l[i]: for j in range(cnt,i,-1): l[j] = l[j-1] l[i] = n break print('新的排序数列为:',l)
结果:
2.4 逆序输出
将一组数的序列逆序输出。
代码:
l = [1,2,3,4,5,6,7,8,9] print (l) l1 = [] print ('将列表逆序输出:') for i in range(len(l)): a=l.pop() #pop() 函数用于移除列表中的一个元素(默认最后一个元素), #并且返回该元素的值。 l1.append(a)#list.append(object) 向列表中添加一个对象object。 print (l1)
结果:
2.5 打印杨辉三角形
打印出如下图的杨辉三角形(要求打印出17行)
代码:
def transfor(fun): #定义一个转换函数, def war(N): #带参数的装饰器,把参数传闭包里 L = N.copy() for j in range(len(L)): temp = str(L[j]) L[j] = temp l = ' '.join(L).center(90) fun(l) return war def f1(N): #把print定义成f1()函数 print(N) N = [1] for i in range(17): f1(N) #这里注意要用f()代替print() N.append(0) N = [N[k] + N[k-1] for k in range(i+2)]
结果:
2.6 数的交换
输入一组数,最大的与第一个元素交换,最小的与最后一个元素交换,输出所有数
代码:
ls=[1,3,2,5,4,7,6] cnt=len(ls) print("交换之前的序列是:",ls) max=max(ls) #求最大值 a=ls.index(max)#求最大值下标 ls[0],ls[a]=ls[a],ls[0] #交换第一个元素与最大值 print("交换第一个元素与最大值之后的序列是:",ls) #分开进行交换 min=min(ls) #求最小值 b=ls.index(min) #求最小值的下标 ls[cnt-1],ls[b]=ls[b],ls[cnt-1] #交换最小值与最后一个元素 print("再次交换最小值与最后一个元素之后的序列是(最终序列):",ls)
结果:
2.7 反向输出链表
创建一个链表,反向输出这个链表。
代码:
class ListNode: def __init__(self,x): self.val=x; self.next=None; def recurse(head,newhead): #递归,head为原链表的头结点,newhead为反转后链表的头结点 if head is None: return ; if head.next is None: newhead=head; else : newhead=recurse(head.next,newhead); head.next.next=head; head.next=None; return newhead; head=ListNode(1); #测试代码 p1=ListNode(2); # 建立链表1->2->3->4->None p2=ListNode(3); p3=ListNode(4); head.next=p1; p1.next=p2; p2.next=p3; newhead=None; p=recurse(head,newhead); #输出链表4->3->2->1->None print ('反向输出:'); while p: print (p.val); p=p.next;
结果:
2.8 合并链表
创建两个包含数字的链表,合并两个链表成一个链表,要求新的链表中数要按照从大到小排序。
代码:
#定义一个基于节点类的单链表对象类 class Node: #data: 节点保存的数据;_next: 保存下一个节点对象 def __init__(self,data,_next=0): self.data=data self.next=_next #_next防止与python标准函数next重名 #将列表数据加上指针变成一个链表 def linked_list(List): if len(List)<1: return None else: for i in range(len(List)): if i==0: head=Node(l[i],0) p=head else: p.next=Node(l[i],0) p=p.next return head #创建列表数据,作为链表的数据来源 l=list(map(int,input("输入一串数字:\n").split())) head=linked_list(l) #更新列表值,从而更新链表,完成合并 l=list(map(int,input("输入一串数字:\n").split())) head1=linked_list(l) p=head #判断链表是否为空 while True: if p.next==0: p.next=head1 break p=p.next p=head #将链表数据进行排序,同时得到其指针序列信息 while p!=0: p1=p.next while p1!=0: if p.data<p1.data: t=p.data p.data=p1.data p1.data=t p1=p1.next p=p.next p=head #通过指针顺序打印链表数据 print("合并后的结果是:") while p!=0: print(p.data,end=" ") p=p.next
结果:
我想能看到这里的同学,无外乎两种人:来拷贝代码的人 和 来拷贝代码的人。 但,在拷贝走的时候,你要想清楚一件事,把代码拷走之后有个蛋用,搞明白对你来说才是最重要的。 好了,就酱紫。 老铁,这要是都不赞,说不过去吧!!! 最后对自己说: 你现在所遭遇的每一个不幸,都来自一个不肯努力的曾经。
相关文章推荐
- python 第六篇 基础练习题 乘客打的费用计算
- 【零基础】Python3学习课后练习题(四)
- python基础——while,for循环练习题
- Python_02_基础语法
- python基础---类的综合操作与练习题
- python - 基础知识练习题
- 【零基础】Python3学习课后练习题(十五)
- Python入门:老男孩python第四天(L04-04-03-python异常处理02)练习题纠正
- Python基础02 基本数据类型
- Python基础练习题(一)
- week01_python基础语法__02
- 【零基础】Python3学习课后练习题(二十七)
- python入门基础教程02 Python简介
- Python基础02 基本数据类型
- [Python]从零开始学python——Day01~02 基础知识
- 【零基础】Python3学习课后练习题(十九)
- Python基础02 基本数据类型
- 【python】基础知识练习题一
- Python练习题【基础语言】
- python基础02 基本数据类型