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