Python - read and write input from user
我在为我的Python类编写这个简短的程序时遇到了困难,我希望有人能提供一些帮助。
我想完成的工作:1。编写一个使用while循环接受用户输入的程序(如果用户按Enter,则退出该程序)。2。将输入保存到文件中,然后打印。三。启动后,程序将显示文件的当前内容。
例子:
第一次启动程序。
输入文本:这是输入
这是输入。
输入文本:更多文本
这是输入。更多的文本。
当你第二次启动程序时
这是输入。更多的文本。
输入文本:
等。
到目前为止我有:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | intext = open('user_input.txt','a') intext.close() string_input = input('Enter text: ') while True: open_input = open('user_input.txt','r') if open_input: for i in open_input: print(i) if string_input !="": uinput = open('user_input.txt','a') uinput.write(string_input + '.') uinput.close() rd = open('user_input.txt', 'r') if rd: for line in rd: print(line) if string_input =="": t = open('user_input.txt', 'r') for line in t: print(line) t.close() break |
问题:打开时,不会显示任何以前存储的文本。如果用户输入文本,它将以无限循环打印,并且不会提示再次输入文本。
正面:输入被记录到文本文件中。如果没有输入文本,退出之前输入的任何文本时都会正确显示。
就像我说的,这是我的家庭作业。我已经搜索了答案,但我似乎把代码拆开,重新组合在一起,只会得到不同的错误。因此,对这方面的一些指导将非常感谢。
我忘记提到的一件事是我使用的是python 3。
再次感谢大卫帮助我更像一个程序员。结果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | intext = open('user_input.txt','r').readline() print(intext) while True: string_input = input('Enter text: ') if string_input =="": t = open('user_input.txt', 'r').readline() print(t) break if string_input !="": d = open('user_input.txt', 'a') d.write(string_input + '. ') d.close() n = open('user_input.txt', 'r').readline() print(n) |
我尽量让代码保持苗条,现在它可以工作了。
以下是几个问题:
我需要在结尾关闭文件吗?当我试图关闭
在寻找答案的时候,我发现了这个。使用"with"语句仍然是最佳做法吗?
例子:
1 2 3 | with open("x.txt") as f: data = f.read() do something with data |
老实说,你的程序,正如你所展示的,有点混乱。我说这不是侮辱,而是因为你的程序需要采取的步骤清单非常清楚,我认为你最终会更好地理解,放弃现有的代码,从头开始。
在您的问题中,您列出了以下步骤:
把你的全部任务变成这样一个特定步骤的列表,这大概是写一个计算机程序工作的80%。剩下要做的就是把它翻译成代码。因此,我建议您考虑如何单独执行这些步骤。
- 编写代码段以显示文件的内容
- 编写代码段以从用户处读取输入行并将其存储在变量中
- 编写一个代码段来检查变量的内容是否为空,如果为空,则退出
- 编写代码段以将变量的内容附加到文件中
- 写一个代码片段来打印变量(或者文件的内容,如果您想这样做的话)
每一个都可以在一行或两行中完成,因此单独地,您应该可以轻松地与他们相处。一旦你完成了所有的部分,你所需要做的就是把它们放在一起:
1 2 3 4 5 6 | # display the contents of the file while True: # read a line of input and store it in a variable # check the contents of the variable to see if it's empty, and if so, exit # append the contents of the variable to the file # print the contents of the variable (or of the file) |
更新:这不是什么大问题,但是你在你的修改计划中有一个不必要的EDOCX1(第二个)声明。考虑一下:如果
Do I need to close the file at the end? When I tried to close
apnd andn , It gave me errors.
是的。看看你和
1 2 3 4 5 6 | # open the file d = open('user_input.txt', 'a') # write to it (or read from it) d.write(string_input + '. ') # close it d.close() |
每次打开文件时,您都应该做同样的事情,即使用
我猜你遇到错误的原因是你试图把
While looking for answers I came a across, this. Is it still best practice to use a"with" statement?
是的,
1 2 3 4 5 | # open the file with open('user_input.txt', 'a') as d: # write to it (or read from it) d.write(string_input + '. ') # Python"automatically" closes it for you |
*这种"打开读/写-关闭"的文件访问模式通常是个好主意。我告诉过你在你的程序中使用它,因为学习如何将一个程序分成几个小步骤,并将每个步骤单独转换成代码对你很重要。但是,当你在写一个程序,这个程序会重复地把东西写到一个文件中,或者从一个文件中读取它们,有时实际上,最好是一开始就打开一次文件,然后保持它的打开状态,而不是每次都打开和关闭它。如果您好奇,可以研究一件事,那就是如何修改您的程序,以减少打开和关闭文件的次数。
使用原始输入而不是输入。
您忘记在while循环中调用input
顺便问一下,为什么不在程序的出口而不是在每个循环中写入数据呢?