数列问题求解
数列问题,请看图片! def foo(n, p, d):n = str(n)
np = int(n[-p])
if 0 <= np <= 4:
r = str((np + d) % 10)
else:
r = str(abs(np - d))
return n[:-p] + r + '0' * (len(n[-p:]) - 1)
if __name__ == '__main__':
N, P, D = map(int, input().split())
print(foo(N, P, D))
本帖最后由 jackz007 于 2022-11-1 05:54 编辑
a , p , d = map(int , input() . split())
e = list(map(int , list(str(a))))
e[- p] = (e[- p] + d) % 10 if e[- p] < 5 else abs(e[- p] - d) % 10
for k in range(-1 , - p , -1) : e = 0
print(*e , sep = '')
运行实况:
D:\\Python>python x.py
124987 2 3
124950
D:\\Python>python x.py
540670 3 9
540300
D:\\Python>python x.py
7145042 2 8
7145020
D:\\Python>python x.py
124987 2 523
124950
D:\\Python>python x.py
4386709 1 2
4386707
D:\\Python> 楼上正解 嗯?这题用Python做{:10_277:} qq1151985918 发表于 2022-10-31 23:32
谢谢,麻烦解释下代码! jackz007 发表于 2022-11-1 05:51
运行实况:
谢谢,麻烦解释下代码含义! 本帖最后由 jackz007 于 2022-11-1 09:35 编辑
nbwubo 发表于 2022-11-1 08:40
谢谢,麻烦解释下代码含义!
a , p , d = map(int , input() . split()) # 从键盘获取三个整数 :a , p , d
e = list(map(int , list(str(a)))) # 把整数 a 变成列表,如果 a = 12345,那么,e =
e[- p] = (e[- p] + d) % 10 if e[- p] < 5 else abs(e[- p] - d) % 10 # e[- p] 就是整数 a 从右边数的第 p 位,根据 e[- p] 的值,按规则计算其新值
for k in range(-1 , - p , -1) : e = 0 # 把 e[- p] 右面的数都变成 0 值
print(*e , sep = '') # 解包打印列表 e,让每个元素之间无间隔 jackz007 发表于 2022-11-1 09:29
第三行的语句有点看不懂,这个是什么语法,没有if 可以有else吗? 本帖最后由 jackz007 于 2022-11-1 10:04 编辑
nbwubo 发表于 2022-11-1 09:55
第三行的语句有点看不懂,这个是什么语法,没有if 可以有else吗?
e[- p] = (e[- p] + d) % 10 if e[- p] < 5 else abs(e[- p] - d) % 10
这样呢,还看不懂? jackz007 发表于 2022-11-1 10:03
e[- p] = (e[- p] + d) % 10 if e[- p] < 5 else abs(e[- p] - d) % 10
这样呢,还看不懂?
哦,分支条件语句也可以这样写?写到一行上? nbwubo 发表于 2022-11-1 12:58
哦,分支条件语句也可以这样写?写到一行上?
是的,e[- p] 的值取决于 if 条件,如果是 True ,就是 if 前面的值,否则,就是 else 后面的值。 jackz007 发表于 2022-11-1 09:29
a , p , d = map(int , input("请输入三个正整数,数字之间用空格隔开:") . split()) # 从键盘获取三个整数 :a , p , d
e = list(map(int , list(str(a)))) # 把整数 a 变成列表,如果 a = 12345,那么,e =
if e[- p] < 5:
e[- p] = (e[- p] + d) % 10 # e[- p] 就是整数 a 从右边数的第 p 位,根据 e[- p] 的值,按规则计算其新值
else:
abs(e[- p] - d) % 10 # p减去d数值的绝对值,并获取该数值的个位数
for k in range(-1 , - p , -1):
e = 0 # 把 e[- p] 右面的数都变成 0 值
print(*e , sep = '') # 解包打印列表 e,让每个元素之间无间隔
nbwubo 发表于 2022-11-16 20:12
改写成这样容易理解点
jackz007 发表于 2022-11-1 09:29
list(str(a) 这个函数是什么意思?为什么a的数值型的值要转换成字符型? jackz007 发表于 2022-11-1 09:29
e[- p] , e 语法是什么意思?
nbwubo 发表于 2022-11-16 20:17
e[- p] , e 语法是什么意思?
序列型对象的切片操作啊,你不会连这个都不懂吧?e[- p] 是负索引,以最后一个元素索引 -1 为参照的,倒数第 2 个元素索引为 -2,余此类推;而 e 则是正向索引,以第一个元素索引 0 为参照,第 2 个元素索引为 1,余此类推。 对啊,这很基础啊{:10_277:}就是切片操作啊 1 学习~
页:
[1]
2