目录
一.Python语法
二.Python中转义字符
1.\(在行尾时)-续行符
2.\\ -- 反斜杠符号
3.\' -- 单引号
4.\" -- 双引号
5. \a -- 响铃(来点程序员式小快乐)
6.\b -- 退格(Backspace)
7.\n -- 换行
8.\v -- 纵向制表符
9.\t -- 横向制表符
10.\r -- 回车
11.\f -- 换页
12.\0 -- 空字符(NULL)
13. r/R -- 原字符
三.print(%)用法
1.整数
2.浮点数
3.字符串
四.print配合format
五.print打印实例:
1.九九乘法表
2.打印心型:
3.数独游戏
一.Python语法
作为一个函数,从我们最先接触的一次函数y=x他们都进行着输入输出,对应着具体的参数,
拥有着各自的语法规则。
print()函数语法如下:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
①"objects"(物品) -- 作为print的输出对象,可以一次输出多个对象。当输出多个对象时需要用, 或+分隔。
②sep(Separate分开,隔开) -- 用来间隔多个对象,默认值是一个空格
③file -- 要写入的文件对象(以文件流形式写入文件还是标准输出流映射到打开脚本窗口)
④flush -- 是否刷新缓冲区
简单解释下参数:
默认参数:file=sys.stdout,print函数是对sys.stdout的高级封装
这里有个大佬对print与sys.stdout的讲解。
sep:换个角度理解就是把逗号代表空格这一默认值给换成'-',转换为自定义的字符串
print('1','2','3',sep='-')
'''
输出:1-2-3
'''
end:默认结尾处换行
print('1','2','3'+'=',sep='+',end='6')
#运行结果:1+2+3=6
flush:把缓冲区的数据强行输出,清空缓冲区。
约等于手机的运行内存。
在读写流中数据先被读到内存(相当于缓存区),再写入,中途用close()方法关闭读写流,缓存数据会丢失。(只有当发生其他事件,如缓冲区已满或发生换行输出才会刷新)
而flush()则刷新缓冲区,强制把其中数据写入文件,清空缓存区,避免数据丢失。
f = open(r'1.txt', 'w')
print('Hello, you in front of the screen.', file=f, flush=True)
#正常情况下print到f中的内容先存到"运行内存"中,
#当文件对象关闭时才把内容输出到'1.txt'中,当flush=True时会立即把内容刷新存到'1.txt'
print当中flush默认是False,写成True后每次调用该语句都会将语句放入对应的文件当中(如果用了file)
这个可以理解为:老师留暑假作业,每名同学需要完成的任务是固定一样的,学霸的你将脑子中的flush改为True觉醒了学霸属性,疯狂赶时间写作业,将"写完作业"这一判定条件视为你"玩游戏上分"这一事件的起始,当然同时也是暑假作业的末端判定。而学渣则是在最后一天熬夜肝作业才完成,即临近"暑假结束"这一必要结束条件,你不得不将你的作业完成。
二.Python中转义字符
转义字符 | 描述 |
\(处于行尾位置) | 续行符 |
\\ | 反斜杠 |
\' | 单引号 |
\" | 双引号 |
\a | 响铃 |
\b | 退格(Backspace) |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
\0 | 空字符(NULL) |
r/R | 原字符 |
讲解:
1.\(在行尾时)-续行符
在每一行代码的最后添加\(注意反斜杠后不能加空格!),他可以将一行代码分成多行来写,打印结果仍是一行内容,便于代码编写整理,阅读。
print('<我在第一行>\
<我在第二行>\
<在这呐第三行>\
<我又到第四行了>')
#运行结果:<我在第一行><我在第二行><在这呐第三行><我又到第四行了>
2.\\ -- 反斜杠符号
由于转义字符的原因在字符串中想打印出\则需要用到反斜杠(\\)
print('Hello\\World!')
#运行结果:Hello\World!
3.\' -- 单引号
当你想在字符串中打印 ' 展现你的语文素养发现不太行时,那么用\'在字符串里表示单引号。
print('My name is \'暮暮不朝\'')
#运行结果:My name is '暮暮不朝'
4.\" -- 双引号
当你想在字符串中打印 "内涵别人时却发现打印不出来,那么用\"在字符串里表示双引号。
5. \a -- 响铃(来点程序员式小快乐)
此转义字符很少见,在Python的解释器中无法真正响铃,在输出含有\a的字符串时,\a的位置会有标识表示出来。
print('Hello World!\a')
# 运行结果:Hello World!
真正实现响铃操作需要win+R键,进入cmd打开控制台:
输入Python进入其编译器模式,然后输入以下代码:
import time
while True:
print('\a')
time.sleep(1) # 每次响铃的间隔时间为1秒
然后连敲两次回车键,就可以听到每秒一次的系统提示音了,关闭控制台即可退出该程序。
6.\b -- 退格(Backspace)
\b相当于用了一次退格键(Backspace)
print('Hello World\b')
#输出结果:Hello Worl
看到这里有人可能就有疑问了,既然\b相当于用了一次退格键Backspace ,为什么还要用这个转义字符呐,直接删掉需要删除的内容不是更方便简单吗。
实际在计算机语言当中, Backspace 并不是删除的指令。组成 Backspace 的两个英文单词 back 和space 分别是回去和空间的意思,组合起来就是”往回走一步“,但与方向左键不同, Backspace 在向左移动光标位置的同时,将后面所有的内容都往前移了一个单位,并替换掉原有内容 。当我们在 Python 中输入字符时,如果输入后立即发现错误,使用 Backspace 键进行修改,这其实是使用退格键将后面的空(NULL)前移了一个单位 ,并替换掉当前位置的内容,给输入者以“删除”的假象。
而我们也可多次用\b相当于连续敲Backspace键,而在最后一个\b后的内容也将替换原有内容,不必破坏源代码。而且还有其他的各种需求。
print('Hello World\b\b\b\b暮暮不朝')
#输出结果:Hello 暮暮不朝
7.\n -- 换行
与\相反,\n是将一行输出为多行
print('<我是第一行>\n<我在第二行>\n<我又跑到第三行了>\n<猜错了我在第四行>')
#运行结果:<我是第一行>
# <我在第二行>
# <我又跑到第三行了>
# <猜错了我在第四行>
8.\v -- 纵向制表符
使用\v,纵向产生四个空字符,相当于竖着用Tab键。
9.\t -- 横向制表符
print('班级\t姓名\t语文\t数学\t英语')
print('一班\t玲羽\t90\t80\t95')
print('十三班\t德睿\t80\t95\t90')
'''
运行结果:
班级 姓名 语文 数学 英语
一班 玲羽 90 80 95
十三班 德睿 80 95 90
'''
print('班级\t姓名\t语文\t数学\t英语')
print('一班\t玲羽\t90\t80\t95')
print('十三班\t德睿\t80\t95\t90')
print('十四班\t上官景儒\t90\t95\t90')
'''
运行结果:
班级 姓名 语文 数学 英语
一班 玲羽 90 80 95
十三班 德睿 80 95 90
十四班 上官景儒 90 95 90
'''
我们可以发现表格错位了此时则可以连用\t来进行补齐
print('班级\t姓名\t\t语文\t\t数学\t\t英语')
print('一班\t玲羽\t\t90\t\t80\t\t95')
print('十三班\t德睿\t\t80\t\t95\t\t90')
print('十四班\t上官景儒\t90\t\t95\t\t90')
'''
运行结果:
班级 姓名 语文 数学 英语
一班 玲羽 90 80 95
十三班 德睿 80 95 90
十四班 上官景儒 90 95 90
10.\r -- 回车
在日常使用 Word 编辑文本时,回车键就是另起一行,从行首开始输入。但在 Python 中,\r 与 \n 的用法却大相径庭。\r (return) 指回到本行行首,\n (new line) 指开启新的一行。因此,要注意在编程语言中的回车与退格,和我们日常工作所理解的用法有很大区别!
其作用是将 \r 后面的内容(包括空格)移到所有字符串开头,并逐一替换开头部分的字符,直至将 \r 后面的内容完全替换完成。没有替换则保持原样
print('Hello\rWorld!')
#输出结果:World!
11.\f -- 换页
\f 后的内容实现换页打印,一般在调用文档编辑工具的页面实现此效果,直接打印会显示和上述 NULL类似的字符效果。
12.\0 -- 空字符(NULL)
\0和\000乃至\00都是表示空字符,用以补足字符串长度。
print(len("Hello World") ) # 11
print(len("Hello World\0") ) # 12
13. r/R -- 原字符
在存在转义字符的字符串前输入 r / R ,则转义机制失效,打印包括转义字符的所有内容。
print(r'Hello\\World')
#输出结果:Hello\\World
如果需要调用文件位置,则r"C:\Users\Desktop\1.jpg"或是"C:\\Users\\Desktop\\1.jpg"
如果需要调用文件位置,则r"C:\Users\Desktop\1.jpg"或是"C:\\Users\\Desktop\\1.jpg"
三.print(%)用法
符号 | 说明 |
%s | 字符串 |
%d | 十进制(整数) |
%f | 浮点数 |
%% | '%' |
1.整数
%o | oct八进制 |
%d | dec十进制 |
%x | hex十六进制 |
print('%o' % 32)
#40
print('%d' % 32)
#32
print('%x' % 32)
#20
2.浮点数
(注意小数点)
%f ——保留小数点后面六位有效数字
%.3f,保留3位小数位
%e ——保留小数点后面六位有效数字,指数形式输出
%.3e,保留3位小数位,使用科学计数法
%g ——在保证六位有效数字的前提下,使用小数方式,否则使用科学计数法
%.3g,保留3位有效数字,使用小数或科学计数法
print('%f'%3.14)#默认保留六位小数
#3.140000
print('%.1f' % 3.14) # 取一位小数
#3.1
print('%e' % 3.14) # 默认六位小数(科学计数法)
#3.140000e+00
print('%.3e' % 3.14) # 取三位小数(科学计数法)
#3.140e+00
print('%g' % 3.1415926) # 默认六位有效数字
#3.14159
print('%.7g' % 3.1415926) # 取七位有效数字
3.141593(这里进位了)
print('%.2g' % 3.1415926) # 取二位有效数字
3.1
3.字符串
print('%s' % 'hello John') # 字符串输出
#hello John
print('%20s' % 'hello John') # 右对齐,取20位,不够则补位
#hello John
print('%-20s' % 'hello John') # 左对齐,取20位,不够则补位
#hello John
print('%.2s' % 'hello John') # 取2位
#he
print('%10.2s' % 'hello John') # 右对齐,取2位
# he
print('%-10.2s' % 'hello John') # 左对齐,取2位
#he
四.print配合format
#顺序输出:
print('name:{};sex:{};grades:{}'.format('lys','man',100))
#索引输出:
print('name:{0};sex:{2};grades:{1}'.format('lys',100,'man'))
#参数输出:
print('name:{c};sex:{a};grades:{b}'.format(a='man',b=100,c='lys'))
#列表输出:
list=['lys',100,'man']
print('name:{0[0]};sex:{0[2]};grades:{0[1]}'.format(list))#相当于一个字典里的第一个'小字典'
#字典输出:
dict={'name':'lys','sex':'man','grades':100}
print('name:{name};sex:{sex};grades:{grades}'.format(**dict))
#类输出:
class s():
name='lys'
grades=100
sex='man'
print('name:{S.name};grades:{S.grades};sex:{S.sex}'.format(S=s))
五.print打印实例:
1.九九乘法表
for i in range(1,10):
for j in range(1,i+1):
print('{}x{}={}\t'.format(j,i,i*j),end='')
print()
输出结果:
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
2.打印心型:
print('\n'.join([''.join([('Love'[(x-y)%4]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<=0 else' ')for x in range(-30,30)])for y in range(15,-15,-1)]))
3.数独游戏
from random import shuffle, randrange
def generate():
# 初始网格
result = []
line = list(range(1,10))
for i in range(9):
result.append(line)
line.append(line.pop(0))
# 注意,这里的切片很重要
line = line[:]
# Python允许函数的嵌套定义
def switchRows(first, second):
# 这里的括号和换行不是必须的
# 只是为了方便手机阅读
(result[first],
result[second]) =\
(result[second],
result[first])
def switchColumns(first, second):
for index in range(9):
(result[index][first],
result[index][second]) =\
(result[index][second],
result[index][first])
# 随机交换行
randomRows = list(range(9))
shuffle(randomRows)
for i in range(0,7,2):
switchRows(randomRows[i],\
randomRows[i+1])
# 随机交换列
randomColumns = list(range(9))
shuffle(randomColumns)
for i in range(0,7,2):
switchColumns(randomColumns[i],\
randomColumns[i+1])
# 随机清空一些格子
num = randrange(25, 50)
positions = {(randrange(9),randrange(9))\
for i in range(num)}
for row, col in positions:
result[row][col] = ' '
return result
def output(grids):
print('+'+'-+'*9)
for row in range(9):
line = '|'.join(map(str,grids[row]))
line = line.join(['|']*2)
print(line)
print('+'+'-+'*9)
grids = generate()
output(grids)
这个可以自行去优化