nbwubo 发表于 2022-10-31 23:01:35

数列问题求解

数列问题,请看图片!

qq1151985918 发表于 2022-10-31 23:32:51

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:51:17

本帖最后由 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>

zhangjinxuan 发表于 2022-11-1 07:11:01

楼上正解

zhangjinxuan 发表于 2022-11-1 07:11:48

嗯?这题用Python做{:10_277:}

nbwubo 发表于 2022-11-1 08:39:32

qq1151985918 发表于 2022-10-31 23:32


谢谢,麻烦解释下代码!

nbwubo 发表于 2022-11-1 08:40:24

jackz007 发表于 2022-11-1 05:51
运行实况:

谢谢,麻烦解释下代码含义!

jackz007 发表于 2022-11-1 09:29:31

本帖最后由 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,让每个元素之间无间隔

nbwubo 发表于 2022-11-1 09:55:09

jackz007 发表于 2022-11-1 09:29


第三行的语句有点看不懂,这个是什么语法,没有if 可以有else吗?

jackz007 发表于 2022-11-1 10:03:27

本帖最后由 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

       这样呢,还看不懂?

nbwubo 发表于 2022-11-1 12:58:32

jackz007 发表于 2022-11-1 10:03
e[- p] = (e[- p] + d) % 10 if e[- p] < 5 else abs(e[- p] - d) % 10

       这样呢,还看不懂?

哦,分支条件语句也可以这样写?写到一行上?

jackz007 发表于 2022-11-1 13:06:20

nbwubo 发表于 2022-11-1 12:58
哦,分支条件语句也可以这样写?写到一行上?

         是的,e[- p] 的值取决于 if 条件,如果是 True ,就是 if 前面的值,否则,就是 else 后面的值。

nbwubo 发表于 2022-11-16 20:12:29

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:15:23

nbwubo 发表于 2022-11-16 20:12


改写成这样容易理解点

nbwubo 发表于 2022-11-16 20:16:09

jackz007 发表于 2022-11-1 09:29


list(str(a) 这个函数是什么意思?为什么a的数值型的值要转换成字符型?

nbwubo 发表于 2022-11-16 20:17:56

jackz007 发表于 2022-11-1 09:29


e[- p] , e 语法是什么意思?

jackz007 发表于 2022-11-16 20:43:03

nbwubo 发表于 2022-11-16 20:17
e[- p] , e 语法是什么意思?


   序列型对象的切片操作啊,你不会连这个都不懂吧?e[- p] 是负索引,以最后一个元素索引 -1 为参照的,倒数第 2 个元素索引为 -2,余此类推;而 e 则是正向索引,以第一个元素索引 0 为参照,第 2 个元素索引为 1,余此类推。

zhangjinxuan 发表于 2022-11-17 07:59:32

对啊,这很基础啊{:10_277:}就是切片操作啊

liyifeng295641 发表于 2022-11-17 11:05:28

1

lxping 发表于 2022-11-17 11:19:40

学习~
页: [1] 2
查看完整版本: 数列问题求解