当前位置: 代码迷 >> python >> 如何在每个数字上加一位?
  详细解决方案

如何在每个数字上加一位?

热度:139   发布时间:2023-06-16 14:10:13.0

这是作业:

编写一个以字符串形式传递的函数,并返回一个与原始字符相同的新字符串,不同之处在于所有数字均由高1的数字代替。 9替换为0。

  • gain_digit('1ab2')→'2ab3'
  • gain_digit('56789')→'67890'
  • gain_digit('abcde')→'abcde'

这是我到目前为止的内容:

number = ""
s = str(number)
l = []

def increase_digit(text):
    for num in s:
    num = int(num)
    num += 1
if num > 9:
    num = 0
    l.append(num)
else:
    l.append(num)

您目前的做法是缩进错误,但根本不检查数字和增量。

相反,您可以遍历字符串并将数字递增1。 如果仅从增量中获取最后一位数字,则可以根据需要将'10'转换为'0'

def increase_digit(text):
    return ''.join(str(int(c)+1)[-1] if c.isdigit() else c for c in text)

例子:

increase_digit('1ab2')
# '2ab3'
increase_digit('56789') 
# '67890'
increase_digit('abcde')
# 'abcde' 

您可以尝试如下操作:

a = ['1ab2', '56789', 'abcde']
a2 = [''.join([chr(ord(c)+1) if c.isdigit() else c for c in b ]).replace(':','0') for b in a]
print a2

输出:

['2ab3', '67890', 'abcde']

在将其强制转换为整数之前,应检查num是否为数字。

这是我的代码和输出

def increase_digit(text):    
    l = []
    for num in text:        
        if num.isdigit():
            num = int(num)
            num += 1
            if num > 9:
                num = 0
        l.append(str(num))
    return l

print(increase_digit('1ab2'))
print(increase_digit('56789'))
print(increase_digit('abcde'))

我的代码输出是这样的:

['2', 'a', 'b', '3']
['6', '7', '8', '9', '0']
['a', 'b', 'c', 'd', 'e']

你快到了 您忘记了几件事:

  1. 检查num是否为数字( num.isdigit() )。
  2. 返回num为字符串形式。
  3. 返回连接的数组。

这是此问题所需的更改:

def increase_digit(text):
    l = []

    for num in text:
        if num.isdigit(): # issue 1
            num = int(num) + 1
            if num > 9:
                num = 0
            num = str(num) # issue 2
        l.append(num)
    return ''.join(l) # issue 3

更先进:

9 + 1 = 10 多数民众赞成在9以上的唯一情况,并且可以通过取数字的最后一位数字0来无条件解决,所以

if num > 9:
    num = 0
num = str(num)

进入str(num)[-1] 我们可以继续消除多行条件-

num = int(num) + 1
num = str(num)[-1]

num = str(int(num) + 1)[-1] ,现在我们有一个小循环-

for num in text:
    if num.isdigit():
        num = str(int(num) + 1)[-1]
    l.append(num)

可以转化为列表理解(对于for )和三元if-else条件-

l = [str(int(num) + 1)[-1] if num.isdigit() else num for num in text]

然后,结合最终回报,我们得到

def increase_digit (text):
    return ''.join(str(int(x) + 1)[-1] if x.isdigit() else x for x in text)

您可以继续使用这种替换方法,并使用string.digitsstr.translate等使代码更优雅-但我相信这个水平足以完成作业。

发生是因为您要增加9,然后才比较“ num> 9”?

这还是输出还是所需的输出?

"increase_digit('1ab2') → '2ab3'
 increase_digit('56789') → '67890'
 increase_digit('abcde') → 'abcde'"

这样的旋转是使用模运算符%的典型示例:

def increase_digit(text):
    return ''.join(str((int(c)+1) % 10) if c.isdigit() else c for c in text)

我不完全了解您的代码,但您似乎正在尝试执行以下操作:

''.join([str((int(s)+1) % 10) if s.isdigit() else s for s in inp])

糟糕,它们看起来确实很相似;-) @Chris_Rands嗨

  相关解决方案