ValueError:无效字面量,无法用基数10转换为int:'Blusson Hall
这段话是作业,但我并不是想要现成的答案。错误信息还没有被详细解释过,所以我不知道该怎么修复这个问题,也不知道为什么会发生。我知道当我试图把s转换成整数时会出现这个问题,但如果我不这样做又会出现不同的错误,所以我有点迷茫……
我觉得这个函数其实挺简单的。我试着把它转换成整数,这样我就可以对它使用范围函数,但似乎不太奏效。这个程序的目的是先在“Blusson Hall”中的字母之间加一个空格,如果已经有空格的话再加一个空格,最后把这个设计打印出来。谢谢大家的帮助。
def spaced(s):
n = int (s)
for [i] in range (n):
if [i] != " ":
n == n+ [i] + " "
if [i] == " ":
n == n+ [i] + " "
print "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-"
print ". ."
print "- " + str (n)+ " -"
print ". ."
print "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-"
#- you write (5 marks) -#
###################
#- Tester's code -#
###################
spaced("Blusson Hall")
3 个回答
你不能把一个字符串直接转换成整数,这就是你在输入时遇到的问题:
n = int(s)
函数 spaced 只接受一个参数 's',而你传入的是一个字符串,然后试图把它转成整数。我觉得你想要的可能是
n = len(s)
但其实你根本不需要这样做。因为字符串是可以被遍历的,你可以像这样循环它:
for ch in s:
...do stuff here...
如果你觉得在字符串 s 中每个字符的索引对你有帮助,使用 enumerate() 可以帮你做到这一点:
for idx, ch in enumerate(s):
...do stuff here...
顺便说一下,其实你根本不需要使用 for 循环。因为字符串是可以被遍历的,而 'join()' 方法也接受可遍历的对象作为参数,所以你几乎可以用下面的代码替代你所有的代码:
' '.join(s)
如果你之前没接触过 Python,这看起来可能有点奇怪。我创建了一个字符串 ' ',而 join() 是所有字符串都有的一个方法。join 方法接受一个可遍历的对象(比如列表,甚至是另一个字符串),然后把作为 join 对象的字符串放在可遍历对象的每个元素之间。所以在这个例子中,它会在字符串 's' 的每个元素之间放一个空格 ' '。
我觉得我找到了问题所在。
不是用
n = int(s)
试试用
n = len(s)
你的问题是,你用一个非数字的字符串去调用 spaced
,然后试图把它转换成整数:
>>> int("Blusson Hall")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'Blusson Hall'
如果你想根据字符串的长度来设置范围,可以使用类似下面的代码:
for i in range(len(s)):
就像这样:
>>> s = "Busson Hall"
>>> for i in range(len(s)):
... print i
...
0
1
2
3
4
5
6
7
8
9
10
另外,作为额外的帮助,你可以用 s[i]
来获取字符串 s
中第 i
个字符(注意,索引从零开始,也就是第一个字符是 s[0]
)。此外,你可能想先从一个空字符串开始,然后把原字符串中的每个字符和你想添加的空格一个个加进去,慢慢构建出最终的结果再返回。
举个例子,这段代码会在每个字符之间加一个冒号:
>>> s = "paxdiablo"
>>> s2 = ""
>>> for i in range(len(s)):
... s2 = "%s%s:%s:" % (s2, s[i], s[i])
...
>>> print s2
p:p:a:a:x:x:d:d:i:i:a:a:b:b:l:l:o:o:
除了给你写代码(而且你聪明地没有直接要求我这样做),我能提供的帮助大概就这些了(不过如果你有任何问题,随时问我,我会提供更多建议)。