如何在Python3.3.5中的字符串中添加数字和字母(最终结果应该是int)?

And*_*yM3 5 python string integer

我的任务是:

"写一个函数sumOfDigits,它有一个string类型的参数.该函数应该返回字符串中数字的总和.不要将多个数字字符串视为一个数字 - "2014"应该被视为4个不同的数字,即2,0 ,1,4.字符串"今天的日期是2014年1月9日",函数应该返回17.你可以假设参数是一个字符串.不需要做任何类型验证."

这是我到目前为止所做的(适当的缩进):

def sumOfDigits (string1: str):

   summation=0

   for i in string1:
        summation=summation + int (i)

   return (summation) 

print (sumOfDigits ('543tf'))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

"Traceback (most recent call last):

  File "C:\Users\Andrew\Desktop\lab3.py", line 45, in <module>

    print (sumOfDigits ('543tf'))

  File "C:\Users\Andrew\Desktop\lab3.py", line 42, in sumOfDigits

    summation=summation + int (i)

ValueError: invalid literal for int() with base 10: 't'"
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?这样做是因为添加int和string/char有什么困难吗?

Joh*_*024 3

问题是除非是数字int(x)否则就会失败。x解决方案是仅对数字求和。为此,python 有 string 方法isdigit。例如:

\n\n
>>> s = \'543tf\'\n>>> sum(int(x) for x in s if x.isdigit())\n12\n
Run Code Online (Sandbox Code Playgroud)\n\n

和:

\n\n
>>> s = "Today\xe2\x80\x99s date is 09/01/2014"\n>>> sum(int(x) for x in s if x.isdigit())\n17\n
Run Code Online (Sandbox Code Playgroud)\n\n

Python3

\n\n

Unicode 添加了大量字符,Python 将其中一些字符分类为数字,即使int不接受它们。上标 3: 就是这样的一个例子\xc2\xb3。为了解决这个问题,python3 引入了它isdecimal,并使其比isdigit. 因此,在 python3 中,可以使用:

\n\n
>>> s = "Today\xe2\x80\x99s date is 09/01/2014 See footnote\xc2\xb3"\n>>> sum(int(x) for x in s if x.isdecimal())\n17\n
Run Code Online (Sandbox Code Playgroud)\n