python蓝桥杯备考——字符串拼接

python蓝桥杯备考——字符串拼接

一、问题解释:

max = str(i) + max等同于max = int(''.join(nums[::-1]))

法1:

 nums = sorted(nums)
 for i in nums:
        max = str(i) + max
        min = min + str(i)

法2:

nums = sorted(nums)
max = int(''.join(nums[::-1]))
min = int(''.join(nums))

以下是含义及用法:

(1)sorted(nums):这行代码使用 sorted() 函数对列表 nums 进行排序,得到一个新的排序后的列表。排序后的列表不会改变原始列表 nums。

(2)for i in nums::这是一个循环语句,用于遍历排序后的列表 nums 中的每个元素。

(3)max = str(i) + max:这行代码将当前元素 i 转换为字符串,并将其与 max 变量进行拼接。由于每次循环都将当前元素放在拼接结果的最左侧,所以最终得到的 max 字符串是 nums 列表中元素的逆序排列。

(4)min = min + str(i):这行代码将当前元素 i 转换为字符串,并将其与 min 变量进行拼接。由于每次循环都将当前元素放在拼接结果的最右侧,所以最终得到的 min 字符串是 nums 列表中元素的顺序排列。

(5)nums[::-1]:这是一个切片操作,用于将排序后的列表 nums 进行逆序排列。python蓝桥杯备考——常见切片操作

(6)‘’.join(nums[::-1]):这行代码使用空字符串 ‘’ 将逆序排列的列表中的元素连接为一个字符串。‘’.join() 函数将列表中的元素按照指定的分隔符(这里是空字符串)进行连接。

(7)int(‘’.join(nums[::-1])):这行代码将连接后的字符串转换为整数,赋值给变量 max。这样,我们得到了排序后的列表中元素的逆序排列的整数。

(8)int(‘’.join(nums)):这行代码将排序后的列表中的元素连接为一个字符串,然后将字符串转换为整数,赋值给变量 min。这样,我们得到了排序后的列表中元素的顺序排列的整数。

相同之处:

这两种方法在功能上是相同的,都是将列表 nums 进行排序,并将排序后的元素连接为字符串,然后将字符串转换为整数。
两种方式的结果是相同的,都能得到排序后的列表中元素的逆序排列的整数。选择哪种方式取决于个人偏好和代码风格。
在运行时间方面,两种方式的差异应该是非常小的,因为它们的逻辑和计算复杂度是相似的。无论是使用 sorted(nums) 进行排序,还是使用切片操作和字符串连接进行逆序排列,最后将字符串转换为整数,它们的时间复杂度都是线性的,取决于列表中元素的数量。

不同之处:区别在于具体的实现方式和代码风格

nums = sorted(nums):这种方式使用了 sorted() 函数对列表 nums 进行排序,得到一个新的排序后的列表。这种方式可以直接修改列表 nums 的顺序,但也会创建一个新的列表对象。
max = int(‘’.join(nums[::-1])):这种方式使用了切片操作 nums[::-1] 将列表 nums 中的元素逆序排列,并使用空字符串 ‘’ 进行连接,得到一个逆序排列的字符串。然后,使用 int() 函数将该字符串转换为整数,赋值给变量 max。这种方式没有修改原始列表 nums 的顺序,而是通过切片和字符串连接操作得到逆序排列的整数。

二、练习

题目:数字黑洞

时间限制:
1s
内存限制:
128MB
题目描述:
任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律:
1、将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;
2、将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数中含有0,则得到的数不足四位);
3、求两个数的差,得到一个新的四位数(高位零保留)。
重复以上过程,最后一定会得到的结果是6174。
比如:4312 3087 8352 6174,经过三次变换,得到6174
输入描述:
一个四位整数,输入保证四位数字不全相同
输出描述:
一个整数,表示这个数字经过多少次变换能得到6174
样例输入:
4312
样例输出:
3

答案:

nums = [i for i in input()]
count = 0
while nums != '6174':
    count += 1
    nums = sorted(nums)
    max = ''
    min = ''
    for i in nums:
        max = str(i) + max
        min = min + str(i)
    max = int(max)
    min = int(min)
    nums =str(max - min)
print(count)
nums = [i for i in input()]
count = 0
while nums != '6174':
    count += 1
    max = ''
    min = ''
    nums = sorted(nums)
    max = int(''.join(nums[::-1]))
    min = int(''.join(nums))
    nums =str(int(max) - int(min))
print(count)
num = int(input())
count = 0
while num != 6174:
    nums = []
    count += 1
    #将四位数分开并排序
    for i in str(num):
        nums.append(int(i))
    nums = sorted(nums)
    #生成四位数能组成的最大值最小值
    max = ''
    min = ''
    for i in nums:
        max = str(i)+max  #新学的方法
        min = min+str(i)
    #求max和min的差
    max = int(max)
    min = int(min)
    num = max - min
#输出
print(count)
  • 24
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王 歪歪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值