使用循环生成一个用户,使用Python在单独的行中输入10个数字,然后将它们写入一个文件

使用循环生成一个用户,使用Python在单独的行中输入10个数字,然后将它们写入一个文件,python,Python,我不确定我做错了什么。我在for循环的行中不断收到无效的语法错误 def main(): outfile = open('numbers.txt','w') outfile.write[input('Enter a value: ') for i in range(10)]: print(i) outfile.close() main() 无论您试图用那个输出文件做什么。write行有两个主要的语法错误,您需要小心

我不确定我做错了什么。我在
for
循环的行中不断收到无效的语法错误

def main():

    outfile = open('numbers.txt','w')
    outfile.write[input('Enter a value: ')
                  for i in range(10)]:
        print(i)
    outfile.close()

main()

无论您试图用那个
输出文件做什么。write
行有两个主要的语法错误,您需要小心


首先,
write
是一种方法,您没有这样对待它。所以您需要使用
()
。此外,请删除
。我不知道你想用那些冒号和打印声明做什么。但这不是有效的语法。第二次检查时,您似乎正在尝试打印每个
i
。使用您使用的通过理解捕获输入的方法,您无法像这样打印输出,因为在打印
i
时,
i
已不在范围内

此外,您将无法使用所使用的方法将列表写入文件。因此,您可能希望编写这些列表值的字符串表示形式。您应该使用
join
方法执行此操作:

outfile.write(' '.join([input('Enter a value: ') for i in range(10)]))
要解释
连接
。这样做的目的是获取您创建的列表,并通过用空格分隔每个条目,从列表条目中创建一个字符串。例如,如果您有一个列表:

[1, 2, 3, 4, 5]
对其调用
'.join()
,将创建一个由空格分隔的字符串,如下所示:

1 2 3 4 5
因此,最终的功能代码如下所示:

def main():

    outfile = open('numbers.txt','w')
    outfile.write(' '.join([input('Enter a value: ') for i in range(10)]))
    outfile.close()

main()
需要注意的是,在处理文件对象时,这里的一个好做法是使用上下文管理器,它会将代码更改为:

def main():
    with open('numbers.txt', 'w') as outfile:
        outfile.write(' '.join([input('Enter a value: ') for i in range(10)]))

上下文管理器通过使用语句来表示。有关文件对象的更多建议阅读,请参阅文档。

如果您的代码与此处的代码相同,则会出现两个问题:

outfile.write()
需要有括号,因为它是一个函数调用

你的缩进搞乱了。要有for循环,您应该有如下内容

for i in range(10):
    print(i)
如果您在代码中使用括号,则可以理解列表,但语法应如下所示:

outfile.write([input('Enter a value: ' for _ in range(10)])

第一个错误是i的行在范围(10)]内。它应该是范围(10)内的i

下一个错误发生在for循环之前的线路上:

outfile.write[input('Enter a value:')
应该是
outfile.write(raw_input('Enter a value:'))

[
需要
,并且用
原始输入
替换
输入
,以便将
字符串
值写入文件

最后,为了向用户请求10次输入,以便将每个输入写入文件的新行,需要将outfile的write方法放入循环中

最终的格式化代码如下所示:

def main():

    outfile = open('numbers.txt','w')
    for i in range(10):
        outfile.write(raw_input('Enter a value: ') + '\n')
    outfile.close()

main()

这是你脚本中的缩进吗?
write
是一种方法,它需要在参数周围加括号。这一行不应该以冒号结尾。而且你的
print
尝试不会像你预期的那样起作用。最后,你不能用这种方式将列表写入文件。然而,整个方法似乎有缺陷。我投票认为“太宽”而结束了因为完整的答案要么需要向您解释大量的内容,这样您就可以自己解决这个问题,要么只需要为您完成任务。我强烈建议您找到一些基本的Python学习材料,并练习如何组合简单的代码元素以产生更复杂的行为。这是不必要的,因为我是我在一个初级Python课程中,写这段代码时,我是按照我的课本来的。我来这里是为了寻求帮助,因为这就是这个网站的目的。我的代码并不完全糟糕,只是缺少了一些东西,所以感谢你在某人情绪低落时踢他们,并真正尝试学习这些材料。忘了提到
i<代码不在“代码>打印(i)<代码> @ CRKETETH00”的范围内,如果<<代码> >“/COD> >行被合理缩进,中间没有一个怪异代码> >代码> @ CRKETETY07TBH,我不知道如何解释那个代码>打印(i)
正在执行。再看一眼,OP似乎正在尝试输出每个
i
。因此,是的,我将编辑以提及这一点。@jpmc26
i
似乎是列表理解的一部分。@cricket_007我想是这样。另一方面,该冒号使它看起来像是
l的非理解
oop。可能它是从一个开始的,OP正在尝试将其修改为另一个。我得到的语法是原始输入没有定义。如果您使用的是Python 3.x,原始输入被重命名为inputYes,我使用的是Python 3.4。谢谢!很高兴提供帮助,欢迎使用StackOverflow。如果答案对您有帮助或对您有效,请通过检查g来接受它绿色复选标记。