如何在每个数字中添加一个?

时间:2017-02-16 17:04:55

标签: python python-3.x

这是作业:

编写一个在字符串中传递的函数,并返回一个与原始字符具有相同字符的新字符串,但所有数字都替换为高一位的数字。 9s被替换为0。

  • increase_digit(' 1ab2')→' 2ab3'
  • increase_digit(' 56789')→' 67890'
  • increase_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)

7 个答案:

答案 0 :(得分:2)

您当前的方法错误地缩进,但也没有检查数字和增量。

相反,您可以迭代字符串并将数字递增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' 

答案 1 :(得分:1)

您可以尝试这样的事情:

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']

答案 2 :(得分:1)

在将数字转换为int之前,您应该检查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']

答案 3 :(得分:1)

你快到了。你忘记了一些事情:

  1. 检查num是否为数字(num.isdigit())。
  2. num返回给字符串表单。
  3. 返回已加入的阵列。
  4. 以下是此问题所需的更改:

    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等来使代码更优雅 - 但我相信这个级别足以完成家庭作业。

答案 4 :(得分:0)

正在发生,因为您在比较之前增加了9,数字>数字> 9"

这也是输出或所需的输出吗?

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:-1)

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

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

糟糕,这看起来很相似;-)嗨@Chris_Rands