程序设计实践(2)Python进阶例题

1.字符反转

题目再现

描述

编写一个函数,接受一个字符串作为参数,将字符串中的每个单词进行反转,并返回反转后的字符串。

假设字符串中的单词由空格分隔。

输入

输入一个字符串

输出

输出反转后的字符串

输入样例 1 

Hello World

输出样例 1

olleH dlroW

初始思路

仅需对每一个单词进行逆序输出即可。只是【把单词根据空格分开】和【逆序输出】两个小知识点需要学习一下。

分割split(),括号中可填入分割的标识,如这里cur.split()则表示按空字符分割,cur.split(",")则表示按逗号分割。当然原来的是字符串,分割后仍然要存在一个字符串中。如果参数有数字,则表示分割的次数。

逆序输出s[::-1],这只是一个顺序完全相反的新列表或字符串,原列表或字符串的内容并没有改变,要存的话要新建一个变量来存。

代码实现

def roll_back(cur):
    words = cur.split()  # split input on whitespace
    for word in words:
        print(word[::-1],end=' ')  # reverse the word and print it

cur = input()
roll_back(cur)

2.重复元素

题目再现

描述

编写一个函数,接受一个列表作为参数,返回列表中所有重复的元素。

输入

输入一行列表里的元素,元素之间是空格隔开的

输出

列表中所有重复的元素

输入样例 1 

1 2 3 2 4 5 3

输出样例 1

2 3

提示

注意元素有可能不止是number

初步思路

首先注意到元素可能是任何数据类型,因为python的输入都是按照字符串进行处理,我们姑且按照字符串作为元素进行编写。同样也是先spilt()这行字符串,把元素存在一个列表中,然后用一个字典记录每一个单词出现的次数,然后还需要把重复的元素记录下来。也就是说,我们需要两个列表和一个字典。最后用join把新列表输出即可。

代码实现

array = input().split()
counts = {}
duplicates = []
for elements in array:
    counts[elements] = counts.get(elements, 0)+1
    if counts[elements] > 1 and elements not in duplicates:
        duplicates.append(elements)
print(" ".join(duplicates))

3.唯一路径数

题目再现

描述

编写一个函数,接受两个正整数 m 和 n 作为参数,计算从网格的左上角到右下角的所有唯一路径数。

比如:m = 3, n = 2输出示例:3(可以通过向右、向右、向下的顺序到达右下角)

输入

输入两个正整数m和n
 

输出

输出由m行n列组成网格的左上角到右下角的唯一路径数

输入样例 1 

3 2

输出样例 1

3

初步思路

其实也可以类似于递归那样子的算法,因为唯一路径从(0,0)到(m,n)的话一定是向右走m步、向下走n步。从最后一步开始推的话,以向下、向右为正方向,一定是【从(m-1,n)向下走了一步】或者是【从(m,n-1)向右走了一步】,因此到(m,n)的路径数是到(m-1,n)和(m,n-1)的路径数之和。而一直推到最初,从(0,0)到(0,0)只有一种路径,因此可以使用这样的递归算法。

代码实现

def uniquePaths(m, n):
    dp = [[0] * n for _ in range(m)]
    for i in range(m):
        for j in range(n):
            if i == 0 and j == 0:
                dp[i][j] = 1  #原点到原点只有一种路径
            elif i == 0:
                dp[i][j] = dp[i][j - 1]  
            elif j == 0:
                dp[i][j] = dp[i - 1][j]  #如果仍有一个坐标为零,那一定是沿着坐标线走的
            else:
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1]  #从左边和从上边来两种情况
    return dp[m - 1][n - 1]

m, n = map(int, input().split())
print(uniquePaths(m, n))

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python进阶之路》是一本非常值得推荐的Python进阶书籍。这本书由一位经验丰富的Python大牛所著,作者拥有超过20年的Python开发经验。这本书涵盖了许多Python进阶知识点,如元编程、动态属性、属性描述符、异步处理等。书详细列举了这些高级特性的使用方法,并讲解得非常透彻。如果你想从入门迈向进阶,这本书是必备的参考资料。 另外,《Python Cookbook》也是一本非常受欢迎的Python进阶书籍。这本书总结了大量精妙的编程技巧和实用的技术,无论你是Python新手还是老手,都会从收获很多。豆瓣评分高达9.2分,可见其受到广大读者的认可。 除了以上两本书,《Python进阶技巧》也是一本非常值得一读的进阶书籍。这本书的作者将许多代码简化成了一行,展现了Python的高级技巧。虽然有些地方可能看起来有些夸张,但它确实帮助你了解Python的特性和一些不错的功能。而且,在关键时刻,这种技巧还可以让你轻松搞定其他人需要十几行代码才能完成的任务。对于想要进阶的同学来说,这本书的阅读是非常适合的。 总而言之,《Python进阶之路》、《Python Cookbook》和《Python进阶技巧》都是非常优秀的Python进阶书籍,适合想要深入学习Python的读者。 : 引用自《Python进阶之路》 : 引用自《Python Cookbook》 : 引用自《Python进阶技巧》

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值