目录名称

我原来的解法

# 获取输入的4位数字
a = int(input())
# 获取4位整数中的每一位的值
first = a//1000
second = a//100-first*10
third = a//10-first*100-second*10
fourth = a-1000*first-100*second-10*third
# 创建临时数组arr,存储每一位的数值
arr = [first,second,third,fourth]
# 使用for循环对每一位的数值进行“加上3再除以9的余数代替该位数字”的操作
for i in range(len(arr)):
    arr[i] = str((arr[i] + 3) % 9)
# 定义数组中i和j位置的元素交换方法
def swap(list,i,j):
    tmp = list[i]
    list[i] = list[j]
    list[j] = tmp
# 将第1位和第3位数字交换
swap(arr,0,2)
# 将第2位和第4位数字交换
swap(arr,1,3)
# 使用字符串数组的join方法,完成数组转换为字符串的操作
print(''.join(arr))

但是觉得方法有点笨:

  1. 首先,不知道如何更高效的获取4位整数中各位的数值
  2. 循环数组,将数组中的每一位计算并转换成字符串,最后采用字符串数组join方法进行拼接的方法很麻烦

收获

看了下讨论区,学习到如下内容:

收获1:获取4位整数中各位的数值(更好的方法)

first = a//1000
second = (a//100)%10  # 原来:second = a//100-first*10
third = (a//10) % 10  # 原来:third = a//10-first*100-second*10
fourth = a % 10       # 原来:fourth = a-1000*first-100*second-10*third

收获2(注意点):通过for循环修改数组中每一项的值

  1. 使用 for item in list 的方法,无法通过循环中 item=xxx 的方法进行每项内容的替换:
    • 必须使用 for i in range(len(list)) ,然后使用list[i]=xxx的方式
    • 或者:创建一个新的空数组,使用 for item in list 的方法,无法通过循环中 new_list.append(new_item) 的方式进行

收获3:交换数组中两个元素的位置(更好的方法)

# 定义数组中i和j位置的元素交换方法
# def swap(list,i,j):
#     tmp = list[i]
#     list[i] = list[j]
#     list[j] = tmp

# 将第1位和第3位数字交换
arr[0],arr[2] = arr[2],arr[0] # swap(arr,0,2)
# 将第2位和第4位数字交换
arr[1],arr[3] = arr[3],arr[1] # swap(arr,1,3)

收获4:拼接打印数组中的每个元素(更好的方法)

# 原方法:使用字符串数组的join方法,完成数组转换为字符串的操作
# print(''.join(arr))

# print(arr[0],arr[1],arr[2],arr[3]) # 6 7 4 5
print(arr[0],arr[1],arr[2],arr[3],sep='') # 6745

收获5(注意点):字符串也可以通过for循环遍历,使用str[i]进行访问第i个位置的元素

a = input()
str1= str()
for i in range(len(a)):
    str1 += str((int(a[i])+3)%9)
print(str1[2],str1[3],str1[0],str1[1],sep='')

最终的成果

# 获取输入的4位数字
a = int(input())

# 获取4位整数中的每一位的值
first = a//1000
second = (a//100)%10  
third = (a//10) % 10  
fourth = a % 10       

# 创建临时数组arr,存储每一位的数值
arr = [first,second,third,fourth]
# 使用for循环对每一位的数值进行“加上3再除以9的余数代替该位数字”的操作
for i in range(len(arr)):
    arr[i] = (arr[i] + 3) % 9
    
# 将第1位和第3位数字交换
arr[0],arr[2] = arr[2],arr[0]

# 将第2位和第4位数字交换
arr[1],arr[3] = arr[3],arr[1] 

# 以四位数的形式 输出破解后的密码
print(arr[0],arr[1],arr[2],arr[3],sep='') # 6745

a = input()
str1= str()
for i in range(len(a)):
    str1 += str((int(a[i])+3)%9)
print(str1[2],str1[3],str1[0],str1[1],sep='')