会有这种情况,你的程序必须与用户进行交互。例如,你想获取来自用户的输入,然后打印一些返回的结果。我们可以分别使用input()和print()函数来实现。
对于输出,我们还可以使用str(字符串)类的各种方法。例如,您可以使用rjust方法来获取一个指定宽度的字符串。更多细节,见 help(str)。
另一个常见的输入/输出类型是处理文件。创建、读和写文件是许多程序至关重要的,我们将在本章探讨这方面。
将这个程序保存为 user_input.py:
def reverse(text):
return text[::-1]
def is_palindrome(text):
return text == reverse(text)
something = input('输入文本: ')
if (is_palindrome(something)):
print("是的,这是回文")
else:
print("不,这不是回文")
输出:
输入文本: 蜜蜂
不,这不是回文
输入文本: 人上人
是的,这是回文
它是如何工作的:
我们使用切片特性来颠倒文本。我们已经看到使用seq[a:b]代码获取从a到b来自序列的切片。我们还可以提供一个第三个确定步长的参数,切片默认的步长是 1,它返回一个连续文本的一部分。给一个负的步长,即 -1 ,将以反向返回文本。
input()函数将一个字符串作为参数,并显示给用户。然后等待用户输入和按回车键。一旦用户输入和按下回车键,input()函数将返回用户输入的文本。
我们获取文本并颠倒它。如果原始文本和颠倒的文本是相等的,那么那个文本是一个回文。
家庭作业
检查一个文本是否是一个回文应该忽略标点符号、空格和案例。例如,"Rise to vote, sir." 也是一个回文,但我们当前的程序并没有说它是。你能改善上述程序来识别这个回文吗?
下面的提示(不要读)
使用一个元组(从这里(http://grammar.ccc.commnet.edu/grammar/marks/marks.htm)你可以找到所有标点符号的一个列表)来保存所有的禁止字符,然后使用会员测试,以确定是否应该删除一个字符,即forbidden = ('!', '?', '.', ...)。
为了读写,你可以通过创建一个file类的对象,分别使用read、readline或 write方法来,打开和使用文件。能够读取或写入文件取决于文件打开时指定的模式。最后,当你完成对文件的操作时,你要调用close方法告诉Python,文件我们使用完了。
例子 (保存为 using_file.py):
poem = '''\
当工作完成时
编程是有趣的
如果想让你的工作有趣
使用Python!
'''
f = open('poem.txt', 'w') # 为'写w'打开文件
f.write(poem) # 文本写入文件
f.close() # 关闭文件
f = open('poem.txt') # 如果不指定打开模式,默认为'读'
while True:
line = f.readline()
if len(line) == 0: # 0长度表示文件结尾
break
print(line, end='')
f.close() # 关闭文件
输出:
D:> python using_file.py
当工作完成时
编程是有趣的
如果想让你的工作有趣
使用Python!
它是如何工作的:
首先,通过内置的函数open,指定文件名和我们要打开的模式,打开一个文件。模式可以是读模式('r'), 写模式('w')或追加模式('a')。我们也可以指定是否以文本格式('t') 或二进制格式('b')读,写或追加。实际上有更多可用的模式,help(open) 会给你更多的细节。默认情况下,open()认为是一个以读方式打开的文本格式的文件。
在我们的例子中,我们首先以写文本格式打开文件,使用文件对象的write方法写文件,然后,我们最后 close(关闭)文件。
接下来,为再次阅读,我们打开同一个文件。我们不需要指定一个模式,因为 '读文本文件' 是默认的模式。我们使用readline方法在一个循环中每次读文件的一行。该方法返回一个完整的行,包括换行符结束时的行。当返回一个空字符串时,这意味着我们已经到达文件的末尾,我们'打破'循环。
在默认情况下,print()函数在屏幕上自动换行打印文本。我们是通过指定end=''禁止产生新行,因为从文件读取的行在结尾已经包含一个换行符。然后,我们最终close文件。
现在,检查poem.txt的内容,确认程序确实写入和从那个文件读取。
Python提供了一个标准的模块称为pickle,使用它你可以在一个文件中存储任何的Python对象,然后把它弄回来后,这就是所谓的持续的存储对象。
例子 (保存为 pickling.py):
import pickle
# 我们将要存储对象的文件名
shoplistfile = 'shoplist.data'
# 购物清单
shoplist = ['苹果', '芒果', '胡萝卜']
# 定到文件
f = open(shoplistfile, 'wb')
pickle.dump(shoplist, f) # 把对象倒入一个文件
f.close()
del shoplist # 释放shoplist变量
# 从仓库读回
f = open(shoplistfile, 'rb')
storedlist = pickle.load(f) # 从文件载入对象
print(storedlist)
输出:
D:> python pickling.py
['苹果', '芒果', '胡萝卜']
它是如何工作的:
要在文件中存储一个对象,我们首先必须以'w'rite写'b'inary 二进制格式的方式open打开文件,然后调用pickle模块的dump函数,这个过程叫拾取。
接下来,我们使用pickle模块的load函数取回对象,这个过程叫做拆开。
我们已经讨论了各种类型的输入/输出,文件处理和使用pickle模块。
接下来,我们将探讨索异常的概念。