<p>我可以给你一个解决办法,但我想帮助你理解你在做什么</p>
<p>首先,我修改了你的代码,这样它就可以在没有单独文件的情况下工作</p>
<p>这不是你应该做的,但这有助于我把代码分开</p>
<pre><code>def average_grade(data):
floats = []
names = []
for line in data:
words = line.split('_')
names.append(words[0])
floats.append(float(words[1]))
print(names)
average_grade('Leo DiCaprio______4.5 6.5 7.5', 'Sean Connery______ 3.5 8.5 5.5')
</code></pre>
<p>当我执行这段代码时,我也会得到<code>ValueError: could not convert string to float:</code></p>
<p>但为什么呢?那么,让我们更改代码:</p>
<pre><code>def average_grade(data):
floats = []
names = []
for line in data:
words = line.split('_')
print(words)
names.append(words[0])
floats.append(float(words[1]))
print(names)
average_grade('Leo DiCaprio______4.5 6.5 7.5', 'Sean Connery______ 3.5 8.5 5.5')
</code></pre>
<p>这个<code>print(words)</code>给了我们<code>['Leo DiCaprio', '', '', '', '', '', '4.5 6.5 7.5']</code></p>
<p>我们发现我们的分线技术还不是很好</p>
<p>让我们更加努力:</p>
<pre><code>def average_grade(*data):
floats = []
names = []
for line in data:
words = line.split('_', 1)
name = words[0]
cursor = len(name)
while line[cursor] == '_':
cursor += 1
grades = line[cursor:]
print((name, grades))
grades = grades.split()
print((name, grades))
grades = [float(i) for i in grades]
avg = sum(grades) / len(grades)
print((name, grades, avg))
names.append(name)
# Now, what to do with these grades? Do we add them all to the list?
floats.append(avg)
print(names)
print(floats)
average_grade('Leo DiCaprio______4.5 6.5 7.5', 'Sean Connery______ 3.5 8.5 5.5')
</code></pre>
<p>现在我们来看看<code>grades</code>列表是如何演变的:</p>
<pre><code>('Leo DiCaprio', '4.5 6.5 7.5') # this is our "original", after eliminating the `_`s.
('Leo DiCaprio', ['4.5', '6.5', '7.5']) # This is a list of the strings representung the grades
('Leo DiCaprio', [4.5, 6.5, 7.5], 6.166666666666667) # This is a list of the numbers, along with their average
('Sean Connery', ' 3.5 8.5 5.5') # from here on, the same for Sean
('Sean Connery', ['3.5', '8.5', '5.5'])
('Sean Connery', [3.5, 8.5, 5.5], 5.833333333333333)
['Leo DiCaprio', 'Sean Connery']
[6.166666666666667, 5.833333333333333]
</code></pre>
<p>我希望这有点帮助</p>
<p>注意,我对<code>____</code>部分的拆分方式有点“手动”;当然最好使用另一种技术,比如正则表达式</p>