Python刷题训练---第一天

  1. 递归

请编写一个函数(允许增加子函数),计算n x m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。

def f(m,n):
    if m == 0 or n == 0:
        return 1 
    ## 当m,n其中一个为0,则只有一条路径
    return f(m,n-1) + f(m-1,n)
  
while True:
    try:
        m,n = map(int,input().split())
        ## map()函数,可以将列表中的数据进行类型转换
        print(f(m,n))
    except:
        break

解题过程:
从(m, n)—>(0, 0)就分两步走:
往右走一步:f(m, n - 1)—>(0, 0) ; 往下走一步:f(m - 1, n)—>(0, 0)
注意:但凡是触碰到边界,也就是说f(x, 0)或者f(0,x)都只有一条直路可走了,这里的x是变量哈。
可以转变为递归: f(m, n) = f(m, n - 1) + f(m - 1, n)

  1. 找最大数字串

输入描述:
输入一个字符串。
输出描述:
输出字符串中最长的数字字符串和它的长度,中间用逗号间隔。如果有相同长度的串,则要一块儿输出(中间不间隔),但是长度还是一串的长度,与数字字符串间用逗号间隔。

import re
def myfunc(x):
    ## 找到字符串中数字的部分,采用正则
    contents = re.findall(r'([0-9]+)', str(x))
    result = []
    max_len = 0
    for content in contents:
        if len(content)>= max_len:
            max_len = len(content)
    obj = ''
    for content in contents:
        if len(content) == max_len:
            obj = obj + content
    return obj + ',' + str(max_len)

x = input()
print(myfunc(x))

你可能感兴趣的:(python,python)