输入 输出

会有这种情况,你的程序必须与用户进行交互。例如,你想获取来自用户的输入,然后打印一些返回的结果。我们可以分别使用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模块。

接下来,我们将探讨索异常的概念。


继续阅读异常

results matching ""

    No results matching ""