【卡码网Python基础课 12.位置互换】


题目描述与分析

1.描述

题目描述:
给定一个长度为偶数位的字符串,请编程实现字符串的奇偶位互换。

输入描述:
输入包含多组测试数据。
输入的第一行是一个整数n,表示有测试数据。(整个输入中,只有一个n)
接下来是n组测试数据,保证串长为偶数位(串长<=50)。

输出描述:
请为每组测试数据输出奇偶位互换后的结果,每组输出占一行。

2.分析

奇偶位互换是指字符串的奇数位和偶数位相互交换位置,比如下面的字符串"0aa0", 前两位相互交换,后两位相互交换,返回的结果是a00a
在这里插入图片描述
想要完成字符串交换,需要完成以下步骤:

遍历字符串
第 1 位和第 2 位交换
第 3 位和第 4 位交换

第 i 位和第 i + 1 位交换
第 i+2 位和第 i+3 位交换

一、交换变量

如果有两个杯子,一杯装了雪碧,一杯装了可乐,要把这两个杯子里的饮料互换,应该引入第三个杯子,具体过程为:
在这里插入图片描述
把第一个杯子里的雪碧倒入第三个杯子中,这样第一个杯子就成了空杯子,第三个杯子里盛放的是雪碧
再把第二个杯子里的可乐倒入第一个杯子中,这样第二个杯子就是空的,第一个杯子里装的是可乐
再把之前倒入第三个杯子里的雪碧倒入第二个杯子中,这样第二个杯子装的是雪碧

上面的操作用代码表示为:

a = 5
b = 10
# 步骤 1:取 a 的值,赋给临时变量 tmp
temp = a
# 步骤 2:取 b 的值,赋给 a 变量
a = b
# 步骤 3:将 tmp,赋给 b 变量
b = temp

不过,Python有十分简洁的写法可以交换两个变量的值:元组结构。

a = 5
b = 10
# a 和 b的值交换
a, b = b, a

因此我们可以实现一个简易的函数,用于实现变量交换

def swap(a, b):
    return b, a

二、代码编写

这道题依然需要先获取变量n和n次循环迭代

n = int(input())	# 获取 n 行测试数据
# 循环迭代 n 次
for _ in range(n):
    s = input() # 获取每行的字符串

为了方便遍历和取得每一位字符,可以将字符串 s 转换为字符列表

# 字符串的每个字符都是列表的一个元素
chs = list(s)

接着,我们需要遍历字符列表,并将当前字符和下一位字符两两交换,当完成第一位和第二位的交换之后,我们应该控制迭代的步数为 2,执行第三位和第四位的交换。

for i in range(0, len(chs)-1, 2):
    # 字符交换

调用名为 swap 的函数,将相邻的字符 chs[i] 和 chs[i+1] 作为参数传递,完成字符交换。

chs[i], chs[i+1] = swap(chs[i], chs[i+1])

最后将已经完成字符交换的 chs 列表通过join()方法拼接成字符串并输出。

print("".join(chs))

完整代码如下:

def swap(a, b):
    return b, a

n = int(input())
for _ in range(n):
    s = input()
    # 字符串的每个字符都称为列表的一个元素
    chs = list(s)
        # 遍历列表,注意迭代的步数为2
    for i in range(0, len(chs)-1, 2):
        # 交换变量
        chs[i], chs[i+1] = swap(chs[i], chs[i+1])
        # 最后将字符列表转换成字符串输出
    print("".join(chs))

三、扩展:元组

在Python中,元组(tuple)是一种内置的数据结构,类似于列表,但它是不可变的。这意味着一旦元组被创建,你就不能修改其内容——无法添加、删除或更改元组内的元素。元组因其不可变性而在某些情况下比列表更适用,特别是在你需要确保数据不被修改时。

创建元组:元组可以通过将一系列元素放在圆括号 () 中来创建,元素之间用逗号分隔。也可以没有括号,直接使用逗号分隔。

# 使用圆括号创建元组
my_tuple = (1, 2, 3)
print(my_tuple)

# 没有使用圆括号也可以创建元组
another_tuple = 4, 5, 6
print(another_tuple)

# 创建只有一个元素的元组时,需要在元素后面添加逗号
single_element_tuple = (7,)
print(single_element_tuple)

访问元组:你可以使用索引来访问元组中的元素,索引从0开始。

print(my_tuple[0])  # 输出 1
print(my_tuple[1])  # 输出 2
# 遍历元素
for element in my_tuple:
    print(element)

除了上面的操作外,元组还有一个“拆包”的功能,元组拆包是指将元组中的元素分别赋值给多个变量的过程,听起来很不知所云,但是示例却十分简单。

my_tuple = (1,2,3)
# 使用元组拆包将元组的元素分配给多个变量
a, b ,c  = my_tuple

在上面的操作中,我们使用元组拆包将元组中的每个元素分别赋值给变量 a、b 和 c,这样就可以快速访问元组中的元素。

所以a, b = b,a这种操作实际上是将,b 和 a 的值构成一个元组 (b, a),然后使用元组解构(“拆包”)将这个元组中的值分别赋给 a 和 b,这样就完成了交换。

  • 24
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值