目录名称
我原来的解法
# 获取输入的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))
但是觉得方法有点笨:
- 首先,不知道如何更高效的获取4位整数中各位的数值
- 循环数组,将数组中的每一位计算并转换成字符串,最后采用字符串数组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循环修改数组中每一项的值
- 使用
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='')