题解 | #密码游戏#

密码游戏

http://www.nowcoder.com/practice/36641ab168664384aff798ba7ce34bc1

目录名称

我原来的解法

# 获取输入的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='')
全部评论
好孩子还只知道总结!!
7 回复 分享
发布于 2022-08-04 22:41
我觉得这样取4位数还是麻烦,我是这样做的: num = input() a = int(num[0]) b = int(num[1]) c = int(num[2]) d = int(num[3])
3 回复 分享
发布于 2023-04-06 17:39 陕西
sep=''的作用是把空格变没有
3 回复 分享
发布于 2022-07-30 11:31
最后直接print(arr,sep='')就可以了,不用单独列出来
点赞 回复 分享
发布于 2024-05-31 16:25 广东
有东西呀,可以可以
点赞 回复 分享
发布于 2023-12-14 21:22 四川
n = input('') m=[] for i in n: i = str((int(i)+3)%9) m.append(i) m[0], m[2] = m[2], m[0] m[1], m[3] = m[3], m[1] print(''.join(m))
点赞 回复 分享
发布于 2023-08-03 14:53 江苏
为什么要//1000,我没明白
点赞 回复 分享
发布于 2023-05-21 22:05 广东
好人一生平安
点赞 回复 分享
发布于 2023-02-02 10:53 浙江
好人
点赞 回复 分享
发布于 2023-01-29 22:50 浙江
学习到了,辛苦了!
点赞 回复 分享
发布于 2022-10-11 16:03 广东
赞!!
点赞 回复 分享
发布于 2022-09-21 19:35 广西
辛苦了
点赞 回复 分享
发布于 2022-08-28 22:54 北京

相关推荐

野猪不是猪🐗:😇:恭喜你以出色的表现成为xxx的一员 😨:您以进入本公司人才库 实际点开:您愿望单中的xxx正在特卖!
点赞 评论 收藏
分享
评论
299
27
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务