Python ValueError:以10为基数的int()的文本无效:'&引用;s21101180756377t}?S<;78O!R1GdO)te19936004699339和#x27;

Python ValueError:以10为基数的int()的文本无效:'&引用;s21101180756377t}?S<;78O!R1GdO)te19936004699339和#x27;,python,Python,我在解决下面的代码战问题时遇到了ValueError " 您的工作是编写一个递增字符串的函数,以创建一个新字符串 如果字符串已以数字结尾,则该数字应递增1。 如果字符串未以数字结尾,则应将数字1追加到新字符串。 示例: foo->foo1 foobar23->foobar24 foo0042->foo0043 foo9->foo10 foo099->foo100 注意:如果数字有前导零,则应考虑数字量。 " 下图是我的代码。我也有这个网站上的接线代码问题,所以我附加了一个图像 下面是错误

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

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

如果字符串已以数字结尾,则该数字应递增1。 如果字符串未以数字结尾,则应将数字1追加到新字符串。 示例:

foo->foo1

foobar23->foobar24

foo0042->foo0043

foo9->foo10

foo099->foo100

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

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

下面是错误


def增量字符串(strng):
int('aasdd')
从字符串导入ascii_小写
n、 k,s=0,0,0
#串
而n=len(strng):
返回strng+str(1)
其他:
k=len(strng[n:]
S=int(“”.join(strng[n:1]))+1
返回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'
STDERR
回溯(最近一次呼叫最后一次):
文件“main.py”,第37行,在
Test.assert_等于(增量_字符串(x),SKLASDFJIOWU2(x))
文件“/home/codewarior/so lution.py”,第14行,增量字符串
s=int(“”.join(strng[n:])+1
ValueError:以10为基数的int()的文本无效:“5y330U_H{C2w^745214B5X tMt 124378204825mT%0Zkt25419007092 1”

回溯的结尾显示无法转换为
int
的字符串。这是一个非常长的字符串,其中包含非数字的字符。回溯显示导致错误的行(
s=int(“”.join(…)
。我想说您的逻辑在某个地方出错了,
n
不是应该的。鉴于您的任务是查看字符串的结尾,并根据在结尾处发现的内容对其进行更改,您应该开始查看结尾

>>> s = string.ascii_lowercase
>>> n = -1
>>> for c in s[::-1]:
...     print(n,c, end='\t')
...     n -= 1

-1 z    -2 y    -3 x    -4 w    -5 v    -6 u    -7 t    -8 s    -9 r    -10 q   -11 p   -12 o   -13 n   -14 m   -15 l   -16 k   -17 j   -18 i   -19 h   -20 g   -21 f   -22 e   -23 d   -24 c   -25 b   -26 a
s[::-1]
是反转序列的常用方法。在片中使用负值可选择从序列末尾开始计数的项目

>>> s[-4]
'w'
在循环中,当它发现一个不是数字的字符时,您可能希望停止迭代。

可能也会有帮助

如果您喜欢while循环:

>>> n = -1
>>> while s[n].isdigit():
...     n -= 1
这需要在使用前调整到
n

>>> n
-4
>>> s[n:]
'z123'
>>> s[n+1:]
'123'
>>>
输出

aa  -> aa1
  -> 1
aedq123  -> aedq124
aq1eeee123  -> aq1eeee124
aqs0  -> aqs1

这不仅仅是对您的问题的回答,您试图转换的字符串不是
int
的字符串表示形式。您应该输入一些print语句,以查看传递给函数的原始字符串是什么,以及语句前的一个字符串:

s = int(''.join(strng[n:]))+1
我相信您的代码基本上是有效的,所以我不会提供完全不同的解决方案。不过,我确实想指出一些其他建议:

  • 您正在检查ascii_小写形式的
    strng[n]。为什么不检查
    strng[n]而不是数字形式的
    ?这没什么大不了的,但允许在输入字符串中使用大写字母、标点符号等

  • 您有一条语句:
    return strng+str(1)
    。为什么不直接使用它:
    return strng+1'
    ?同样,这不是什么大问题,只是更直接一点

  • 在语句
    s=int(''.join(strng[n:])+1
    中,
    strng[n:][/code>只是一个字符串,因此
    '.join(strng[n:])
    只产生
    strng[n:][/code>。因此,该语句可以简化为
    s=int(strng[n:])+1

  • 您不需要将变量
    k
    s
    预初始化为0,因为它们在第一次读取之前是稍后设置的


  • 请不要发布代码/数据/回溯的图像。只需复制文本,粘贴到问题中,并将其格式化为代码(选择它并键入
    ctrl-k
    )……您应该将代码复制并粘贴到问题中。然后通过输入
    ctrl-K.
    ,选择代码并在as代码处设置格式。错误消息也应该复制并粘贴到问题中,并且最好在每行前面加一个
    字符。查看您需要哪些帮助?您了解什么吗错误的意思是?我用光学字符识别了你的图像并添加到你的问题中-请验证。
    # your code goes here
    
    def increment_string(string):
        if len(string)==0:
            return '1'
        index = 0
        for idx, char in enumerate(string):
            if not char.isdigit():
                index = idx
        charc, digit = string[:index+1], string[index+1:]
        digit = int(digit) if len(digit)!=0 else 0
        inte = digit + 1
    
        return charc + str(inte)
    
    
    check = ['aa','','aedq123','aq1eeee123','aqs0']
    
    for i in check :
        print('{}  -> {}'.format(i,increment_string(i)))
    
    aa  -> aa1
      -> 1
    aedq123  -> aedq124
    aq1eeee123  -> aq1eeee124
    aqs0  -> aqs1
    
    s = int(''.join(strng[n:]))+1