-1

下面给出的是一个 python 代码,它应该从列表中读取值,并在对每个值进行平方后获取所有值的总和。

def squareEach(nums):
    for i in nums[:-1]:
        s=nums[i]*nums[i]
        nums[i]=s


def sums(num):
    sum1=1
    for i in num[:-1]:
        sum1=sum1+num[i]
    return sum1


def toNumbers(strlist):
    for i in range(len(strlist)):
        strlist[i]=int(strlist[i])

file=raw_input("enter a filename: ")
openf=open(file,'w')
openf.write("1 2 3 4 5 6 7 8 9 10")
openf=open(file,'r')


s=''
for i in openf:
    s=i
s=string.split(s)

for i in range(len(s)):
    s[i]=int(i)
squareEach(s)
s=sums(s)
print s

这是程序,我收到错误消息。为什么?

4

2 回答 2

2

Python for 循环遍历列表的元素(而不是索引):

for i in [1, 2, 4]:
   print i

# Prints 1, 2 and 4

您将通过使用每个元素的索引来修改现有的:

def squareEach(nums):
    for i in range(len(nums)):
        nums[i] = nums[i]*nums[i]

虽然我会创建一个创建新列表的函数:

def squareEach(nums):
    return [n**2 for n in nums]
于 2013-04-05T01:40:26.010 回答
0

您的代码存在许多问题。我建议您尝试阅读更多 Python 教程,以确保您了解基础知识。

file=raw_input("enter a filename: ")

file是内置的,重新定义内置被认为是不好的做法。标准约定是在名称末尾添加下划线,例如file_

s=''
for i in openf:
    s=i

这将简单地将 s 分配给文件的最后一行。您可能想要的是s = openf.read(),它将为您提供整个文件内容。

for i in range(len(s)):
    s[i]=int(i)

这会将 s 的内容分配给一堆整数,完全丢弃您从文件中读取的任何内容。你的意思可能是s = map(int, s). 请注意,map 的使用有些争议,有些人更喜欢列表推导,即使map在这种情况下版本更短更容易。

for i in nums[:-1]:

这会遍历列表中除最后一个数字之外的所有内容。

for i in nums[:-1]:
    s=nums[i]*nums[i]
    nums[i]=s

除了前面提到的切片问题之外,您正在迭代列表中的值,而不是索引。写你想要做的最惯用的方式是

nums[:] = [x*x for x in nums]

PS 请阅读在 Stack Overflow 上发布问题的指南。

于 2013-04-05T01:45:58.093 回答