import math
#Python3 输入和输出
'''
Python两种输出值的方式: 表达式语句和 print() 函数。
第三种方式是使用文件对象的 write() 方法,标准输出文件可以用 sys.stdout 引用
将输出的值转化成字符串形式
str(): 函数返回一个用户易读的表达形式。
repr(): 产生一个解释器易读的表达形式。
'''
for x in range(1, 11):
print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')
# 注意前一行 'end' 的使用
print(repr(x*x*x).rjust(4))
#rjust() 方法, 可以将字符串靠右, 并在左边填充空格。
#还有类似的方法, 如 ljust() 和 center() 分别是靠左,居中
# zfill() 左边以0填充
print('123'.zfill(3)) #123
print('123'.zfill(4)) #0123
print('123'.zfill(5)) #00123
#位数不够才会填0
# format() 的使用
print(' {0}今年{1}岁了'.format('小明',18)) #小明今年18岁了
#!a (使用 ascii()), !s (使用 str()) 和 !r (使用 repr()) 可以用于在格式化某个值之前对其进行转化:
print('a是{}'.format('a')) #a是a
print('a是{!a}'.format('a')) #a是'a'
print('a是{!r}'.format('a')) #a是'a'
print('a是{!s}'.format('a')) #a是a
print('常量Π的值近似为 {0:.5f}。'.format(math.pi)) #常量Π的值近似为 3.14159。
#传入一个字典, 然后使用方括号 [] 来访问键值 :
dic={'中国':'北京','美国':'纽约','英国':'伦敦'}
print('中国的首都是{0[中国]},美国的首都是{0[美国]},英国的首都是{0[英国]}'.format(dic))
#也可以通过在 dic 变量前使用 ** 来实现相同的功能:
print('中国的首都是{中国:},美国的首都是{美国:},英国的首都是{英国:}'.format(**dic))
#还可以使用;类似于c语言的处理方式
name='小明'
age=18
print('%s今年%d岁了'%(name,age))
#读取键盘输入
#Python提供了 input() 内置函数从标准输入读入一行文本,默认的标准输入是键盘。
#input 可以接收一个Python表达式作为输入,并将运算结果返回。
print("请输入:")
str=input()
print('你输入的是:{}'.format(str))
'''
读和写文件
open() 将会返回一个 file 对象,基本语法格式如下:
open(filename, mode)
fileName:你将要读取的文件名称
mode:
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
'''
#我在F:/python/pythonTest.txt 文件中写如下内容:
'''
1234bcd
dgfghfg
'''
fp=open("F:/python/pythonTest.txt",'r')
text=fp.read()
print("你读取的数据是:{}".format(text))
fp.close()
#输出如下内容
#你读取的数据是:1234bcd
#dgfghfg
#读取一行
fp=open("F:/python/pythonTest.txt",'r')
text=fp.readline()
print("读取一行内容是:{}".format(text))
fp.close()
#输出内容:读取一行内容是:1234bcd
#写文件
fp=open("F:/python/pythonTest.txt",'a+')
fp.write("\ntest Write")
fp.close()
fp=open("F:/python/pythonTest.txt",'r')
text=fp.read()
print("追加了内容之后:{}".format(text))
fp.close()
'''
输出的内容是:
追加了内容之后:1234bcd
dgfghfgtest Write
test Write
'''
'''
文件的相关函数还有:
f.tell() 返回文件对象当前所处的位置, 它是从文件开头开始算起的字节数。
f.seek() 如果要改变文件当前的位置, 可以使用 f.seek(offset, from_what) 函数。
from_what 的值, 如果是 0 表示开头, 如果是 1 表示当前位置, 2 表示文件的结尾,例如:
seek(x,0) : 从起始位置即文件首行首字符开始移动 x 个字符
seek(x,1) : 表示从当前位置往后移动x个字符
seek(-x,2):表示从文件的结尾往前移动x个字符
'''
'''
python的pickle模块实现了基本的数据序列和反序列化。
通过pickle模块的序列化操作能够将程序中运行的对象信息保存到文件中去,永久存储。
通过pickle模块的反序列化操作,能够从文件中创建上一次程序保存的对象。
pickle.dump(obj, file, [,protocol])
x = pickle.load(file)
'''