首页 > 解决方案 > ValueError: int() 以 10 为底的无效文字:'"s21101180756377t}?S<78O#!R1GdO)te19936004699339'

问题描述

我在解决代码大战中的以下问题时遇到了 ValueError

" 你的工作是编写一个递增字符串的函数,以创建一个新字符串。

如果字符串已经以数字结尾,则该数字应加 1。如果字符串不以数字结尾。数字 1 应附加到新字符串中。例子:

富 -> 富1

foob​​ar23 -> foobar24

foo0042 -> foo0043

foo9 -> foo10

foo099 -> foo100

注意:如果数字有前导零,则应考虑位数。"

下图是我的代码。我在这个网站上的接线代码也有问题,所以我附上了一张图片。

在此处输入图像描述

下面是错误

在此处输入图像描述


def increment_string(strng):
    int('aasdd')
    from string import ascii_lowercase
    n,k,s = 0, 0, 0
    #string
    while n < len(strng) and strng[n] in ascii_lowercase:
        n += 1
    if n >= len(strng):
        return strng+str(1)
    else:
        k = len(strng[n:])
        S = int(''.join(strng[n:1]))+1
        return strng[:n] + str(s).zfill(k)

追溯

STDERR
Traceback (most recent call last):
  File "main.py", line 37, in < module>
    Test.assert_equals (increment_string(x), sklasdfjioweu2 (x))
  File "/home/codewarrior/so lution.py", line 14, in increment_string
    s = int(''.join(strng[n:]))+1
ValueError: invalid literal for int() with base 10: '5y330U_H{C2w^745214B5X tMt 124378204825mT%0Zkt25419007092 1'

标签: python

解决方案


这不仅仅是您问题的答案,即您尝试转换的字符串不是int. 您应该输入一些打印语句,以查看传递给您的函数的原始字符串是什么,以及在您的语句之前的一个:

s = int(''.join(strng[n:]))+1

我相信您的代码基本上可以工作,因此我不会提供完全不同的解决方案。但是,我确实还想指出其他一些建议:

  1. 您正在检查strng[n] in ascii_lowercase. 为什么不检查strng[n] not in digits?这没什么大不了的,但可以在您的输入字符串中使用大写字母、标点符号等。

  2. 你有一个声明:return strng+str(1)。为什么不直接做到:return strng + '1'?同样,没什么大不了的,但更直接一点。

  3. 在语句中s = int(''.join(strng[n:]))+1strng[n:]只是一个字符串,所以''.join(strng[n:])就产生了strng[n:]。所以这个说法可以简化为s = int(strng[n:])+1

  4. 您不需要预先初始化变量k并将s其设置为 0,因为它们是稍后在首次读取之前设置的。


推荐阅读