python基础练习题 02

版权声明:未经原作者允许不得转载本文内容,否则将视为侵权 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

结果:
在这里插入图片描述

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

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

好了,就酱紫。

 

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


最后对自己说:
你现在所遭遇的每一个不幸,都来自一个不肯努力的曾经。

猜你喜欢

转载自blog.csdn.net/springhammer/article/details/88540558