您的位置:首页 > 编程语言 > Python开发

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

结果:

我想能看到这里的同学,无外乎两种人:来拷贝代码的人 和 来拷贝代码的人。

但,在拷贝走的时候,你要想清楚一件事,把代码拷走之后有个蛋用,搞明白对你来说才是最重要的。

好了,就酱紫。

老铁,这要是都不赞,说不过去吧!!!

最后对自己说:
你现在所遭遇的每一个不幸,都来自一个不肯努力的曾经。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: