Python语言程序设计——实验六

1、编写函数,接收一个字符串,分别统计大写字母、小写字母、数字、其他字符的个数,并以元组的形式返回结果。

def demo(v): 
  capital = little = digit = other =0 
  for i in v: 
     if 'A'<=i<='Z': 
        capital+=1 
     elif 'a'<=i<='z': little+=1 
     elif '0'<=i<='9': digit+=1 
     else: other+=1 
  return (capital,little,digit,other) 
x = 'AAQwertt12~!@#'
print(demo(x))

2、在屏幕上显示杨辉三角形。杨辉三角计算有技巧:原理是本行相邻两个元素的和是下一行在这连个元素中间位置元素的值,其实是本行元素的错位相加。

第一种 :

def triangle():
    N = [1]
    while True:
        yield N     #generator特点在于:在执行过程中,遇到yield就中断,下次又继续执行
        N.append(0)  #每次都要在最后一位加个0,用于后续的叠加
        N = [N[i]+N[i-1] for i in range(len(N))]
def print_triangle(x):
    a = 0
    for t in triangle():  #这里可以每次调用一个N(得力于Yield函数)
        print(t)
        a += 1
        if a ==x:
             break
print_triangle(10)

第二种:

N = [1] #先把第一行给定义好
for i in range(10):  #打印10行
#从这里开始我们就要把list转换为一个剧中的字符串打印出来
    L = N.copy()   #我们需要吧N复制给L,而不能直接L = N,因为这样L和N会在同一个地址,后续算法就会出错
    for j in range(len(L)):   #遍历和转化
        temp = str(L[j])
        L[j] = temp
    l = ' '.join(L).center(50)  #组合和剧中一起写
    print(l)      #这里就是打印l了
    N.append(0)   #因为复制之后L是L,N是N,所以我们还是继续在N末尾加0
N = [N[k] + N[k-1] for k in range(i+2)]

 3、编写函数,接收任意多个整数并输出其中的最大值和所有整数之和。

def max_sum(num_list):
    sum_num = 0
    max_num = int(num_list[0])
    num_list = num_list.split(",")
    for i in range(len(num_list)):
        sum_num = sum_num + int(num_list[i])
        if(int(num_list[i]) > max_num):
            max_num = int(num_list[i])
    return sum_num,max_num
 
if __name__ == '__main__':
    num_list = input('请输入一些整数以逗号隔开:')
    sum_num,max_num = max_sum(num_list)
    print('最大的整数是:',max_num)
    print('所有整数之和是:',sum_num)

 4、小明爬楼梯假设一段楼梯共 10 个台阶,小明一步最多能上 3 个台阶。编写程序计算小明上这段楼梯一共有多少种方法。采用递推法或者递归法两种代码都可以。

        递推法:从第10个台阶上往回看,有3种方法可以上来(从第9个台阶上一步迈1个台阶上来,从第8个台阶上一步迈2个台阶上来,从第7个台阶上一步迈3个台阶上来),同理,第9个、8个、7个台阶都可以这样推算,从而得到公式f(n) = f(n-1) + f(n-2) + f(n-3),其中n=10、9、8、...、5、4;然后就是确定这个递归公式的结束条件了。第一个台阶只有1种上法,第二个台阶有2种上法(一步迈2个台阶上去、一步迈1个台阶分两步上去),第三个台阶有4种上法(1+1+1;1+2;2+1;3)。

def climbStairs1(n):
    # 递推法
    a = 1  # 上一个台阶只有一种方法
    b = 2  # 上两个台阶有两种方法
    c = 4  # 上三个台阶有四种方法
    for i in range(n - 3):
        c, b, a = a + b + c, c, b
    return c 
print(climbStairs1(10))
 

def climbStairs2(n):
    # 递归法
    first3 = {1:1,2:2,3:4}
    if n in first3.keys():
        return first3[n]
    else:
        return climbStairs2(n-1)+climbStairs2(n-2)+climbStairs2(n-3)
 
print(climbStairs2(10))

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值