python - ValueError: int() 以 10 为底的无效文字:'"s21101180756377t}?S<78O#!R1GdO)te19936004699339'
问题描述
我在解决代码大战中的以下问题时遇到了 ValueError
" 你的工作是编写一个递增字符串的函数,以创建一个新字符串。
如果字符串已经以数字结尾,则该数字应加 1。如果字符串不以数字结尾。数字 1 应附加到新字符串中。例子:
富 -> 富1
foobar23 -> 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'
解决方案
这不仅仅是您问题的答案,即您尝试转换的字符串不是int
. 您应该输入一些打印语句,以查看传递给您的函数的原始字符串是什么,以及在您的语句之前的一个:
s = int(''.join(strng[n:]))+1
我相信您的代码基本上可以工作,因此我不会提供完全不同的解决方案。但是,我确实还想指出其他一些建议:
您正在检查
strng[n] in ascii_lowercase
. 为什么不检查strng[n] not in digits
?这没什么大不了的,但可以在您的输入字符串中使用大写字母、标点符号等。你有一个声明:
return strng+str(1)
。为什么不直接做到:return strng + '1'
?同样,没什么大不了的,但更直接一点。在语句中
s = int(''.join(strng[n:]))+1
,strng[n:]
只是一个字符串,所以''.join(strng[n:])
就产生了strng[n:]
。所以这个说法可以简化为s = int(strng[n:])+1
。您不需要预先初始化变量
k
并将s
其设置为 0,因为它们是稍后在首次读取之前设置的。
推荐阅读
- php - Fortnite API html
- react-native - 无法在反应本机导航选项 headerRight 中设置事件处理程序
- jquery - 如果图像被取消选择,jQuery 无法获取 id
- android-studio - Android Studio 无法删除导入库模块
- vba - Vlookup vba 自动化
- python-3.x - pandas 使用条件 lambda 表达式分配多列
- javascript - 如何在节点 JS 中执行从 GET 请求获得的脚本并等待 x 秒以完成程序?
- python - 如何在其他函数完成执行后调用 tkinter 中的函数?
- file - 如何在 PHP 中将所有文件和文件夹从一个目录移动到另一个目录?
- jquery - 具有空值的 DataTables 列定义