通过游戏学python 3.6 第一季 第三章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码 可复制直接使用 娱乐 可封装 函数
猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码
1 #猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码 2 3 import random 4 secrst = random.randint(1,99) 5 6 number = secrst 7 8 amount = random.randint(3,8) 9 print('本次游戏次数为',amount,'次') 10 11 count=0 12 while count<=amount: 13 try: 14 conversion=input('请猜数字') 15 guess=int(conversion) 16 17 if guess == number: 18 print('猜对了') 19 break 20 elif guess > number: 21 print('大了') 22 else: 23 print('小了') 24 25 count=count+1 26 27 if count==amount: 28 countine=input('任意键重新开始,“N”键退出游戏') 29 if countine !='n': 30 count=0 31 else: 32 exit() 33 except: 34 print('请输入数字,而不是其他')
import random
1 ''' 2 3 1.定义: 4 5 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能), 6 本质就是.py结尾的python文件(文件名:test.py,对应的模块名test) 7 8 包:用来从逻辑上组织模块的,本质就是一个目录(必须带有一个__init__.py 的文件) 9 10 2.导入方法 11 12 import module_name #快捷方式调用 13 import module_name,module2_name #使用方法 module_name.m1() 14 15 from module_name import * #完全复制,不建议使用,容易被覆盖 16 from module_name import m1,m2,m3 #使用方法 m1() 17 18 from module_name import logger as logger_alex #完全复制并且as改名 19 20 3.import本质(路径搜索和搜索路径) 21 22 导入模块的本质就是把python文件解释一遍 23 (import test test='test.py all code') 24 (from test import name name='code') 25 # import test1 #test1='test1.py 全部执行一遍' 26 # from.import test1 #当前目录路径下完全复制运行执行一遍 27 28 导入包的本质就是执行该包下的__init__.py 的文件 29 import module_name ---> module_name.py ---->module_name.py的路径--->sys.path 30 31 4.导入优化 32 33 不重复搜索调用的方法 34 from module_name import m1 #单个完全复制,使用方法 m1() 35 from module_name import logger as logger_alex #完全复制并且as改名 36 37 5.模块的分类 38 39 a:标准库 40 b:开源模块(第三方模块) 41 c:自定义模块 42 43 ''' 44 45 print('-----------寻找当前环境目录路径--------') 46 import sys,os 47 a = os.path.abspath(__file__) 48 b = os.path.dirname(os.path.abspath(__file__)) 49 c = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 50 d = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) 51 52 print(a) 53 print(b) 54 print(c) 55 print(d) 56 57 58 print('--------创建新目录开始-----------') 59 ''' 60 Python对文件的操作还算是方便的,只需要包含os模块进来,使用相关函数即可实现目录的创建。 61 主要涉及到三个函数 62 1、os.path.exists(path) 判断一个目录是否存在 63 2、os.makedirs(path) 多层创建目录 64 3、os.mkdir(path) 创建目录 65 ''' 66 67 def mkdir(path): 68 # 引入模块 69 import os 70 71 # 去除首位空格 72 path=path.strip() 73 # 去除尾部 \ 符号 74 path=path.rstrip("\\") 75 76 # 判断路径是否存在 77 # 存在 True 78 # 不存在 False 79 isExists=os.path.exists(path) 80 81 # 判断结果 82 if not isExists: 83 # 如果不存在则创建目录 84 print(path+'创建成功') 85 # 创建目录操作函数 86 os.makedirs(path) 87 return True 88 else: 89 # 如果目录存在则不创建,并提示目录已存在 90 print (path+'目录已存在') 91 return False 92 93 # 定义要创建的目录 94 m = '\\foo' 95 mkpath = c+m 96 # 调用函数 97 mkdir(mkpath) 98 print('--------创建新目录完成-----------') 99 100 101 print('--------创建 module_alex.py 开始-----------') 102 data1="name='alex'\n" 103 data2="def say_hello():\n" 104 data3="\tprint ('hello alex')" 105 106 sys.path.append(d) 107 f = open (mkpath + '\\module_alex.py','w+') 108 f.write(data1) 109 f.write(data2) 110 f.write(data3) 111 112 f.flush() 113 f.close() 114 print(f) 115 print('--------创建 module_alex.py 完毕-----------') 116 117 ''' 118 flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件, 119 同时清空缓冲区,不需要是被动的等待输出缓冲区写入。 120 一般情况下,文件关闭后会自动刷新缓冲区,但 121 有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。 122 ''' 123 print('--------演示import 功能-----------') 124 125 import sys,os 126 print (sys.path) 127 x=(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) 128 sys.path.append(x) 129 130 131 print('--------演示调用模块-----------') 132 133 import module_alex 134 print(module_alex.name) 135 module_alex.say_hello() 136 137 138 139 140 ''' 141 创建和读取文件 142 143 info = { 144 'name':'alex', 145 'age':22 146 } 147 148 f = open ('test.txt','w') 149 f.write(str(info)) 150 151 f.close() 152 153 154 155 f = open ('test.txt','r') 156 157 data = eval(f.read()) 158 159 f.close() 160 161 print (data['age']) 162 163 '''
1 #自动生成代码 2 3 print('-----------寻找当前环境目录路径--------') 4 import sys,os 5 a = os.path.abspath(__file__) 6 b = os.path.dirname(os.path.abspath(__file__)) 7 c = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 8 d = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) 9 10 print(a) 11 print(b) 12 print(c) 13 print(d) 14 15 16 print('--------创建新目录开始-----------') 17 18 19 def mkdir(path): 20 # 引入模块 21 import os 22 23 # 去除首位空格 24 path=path.strip() 25 # 去除尾部 \ 符号 26 path=path.rstrip("\\") 27 28 # 判断路径是否存在 29 # 存在 True 30 # 不存在 False 31 isExists=os.path.exists(path) 32 33 # 判断结果 34 if not isExists: 35 # 如果不存在则创建目录 36 print(path+'创建成功') 37 # 创建目录操作函数 38 os.makedirs(path) 39 return True 40 else: 41 # 如果目录存在则不创建,并提示目录已存在 42 print (path+'目录已存在') 43 return False 44 45 # 定义要创建的目录 46 m = '\\'+input('目录名称:') 47 mkpath = c+m 48 # 调用函数 49 mkdir(mkpath) 50 print('--------创建新目录完成-----------') 51 52 53 print('--------创建 module_alex.py 开始-----------') 54 data1=''' 55 56 #socketserver基本使用 57 import os 58 import json 59 60 import socketserver 61 62 class MyTCPHandler(socketserver.BaseRequestHandler): 63 64 def put(self,*args): 65 #接收客户端文件 66 cmd_dic = args[0] 67 filename = cmd_dic['filename'] 68 filesize = cmd_dic['size'] 69 if os.path.isfile(filename): 70 f = open(filename + '.new','wb') 71 else: 72 f = open(filename ,'wb') 73 74 self.request.send(b'200 ok')#返回json格式 75 received_size = 0 76 while received_size < filesize: 77 data = self.request.recv(1024) 78 f.write(data) 79 received_size += len(data) 80 else: 81 print ('file[%s] has uploaded...' % filename) 82 83 84 def handle(self): 85 while True: 86 try: 87 self.data =self.request.recv(1024).strip() 88 print ('{} wrote:'.format(self.client_address[0])) 89 print (self.data) 90 91 cmd_dic = json.loads(self.data.decode()) 92 action = cmd_dic['action'] 93 94 if hasattr(self,action): 95 func = getattr(self,action) 96 func(cmd_dic) 97 98 #self.request.send(self.data.upper()) 99 except ConnectionResetError as e: 100 print ('err,e') 101 break 102 103 104 105 106 if __name__ == '__main__': 107 108 HOST,PORT = 'localhost',9999 109 #HOST,PORT = '0.0.0.0',9999 110 111 server = socketserver.TCPServer((HOST,PORT),MyTCPHandler) 112 server.serve_forever() 113 114 115 ''' 116 117 118 sys.path.append(d) 119 ls = input('文件名称:') 120 f = open (mkpath + '\\'+ ls + '.py','w+',encoding='utf-8') 121 f.write(data1) 122 123 124 f.flush() 125 f.close() 126 print(f) 127 print('--------创建 module_alex.py 完毕-----------')
1 #random模块 String(字符串) 2 #随机模块 3 4 #!/usr/bin/env python 5 #_*_encoding: utf-8_*_ 6 import random 7 print('#random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0') 8 print (random.random()) #0.6445010863311293 9 10 print('用于生成一个指定范围内的整数。') 11 print (random.randint(1,7)) #4 12 #random.randint()的函数原型为:random.randint(a, b), 13 #用于生成一个指定范围内的整数。 14 # 其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b 15 16 print('从指定范围内,按指定基数递增的集合中 获取一个随机数。') 17 print (random.randrange(1,10)) #5 顾头不顾尾只不会1-9 18 #random.randrange的函数原型为:random.randrange([start], stop[, step]), 19 # 从指定范围内,按指定基数递增的集合中 获取一个随机数。如:random.randrange(10, 100, 2), 20 # 结果相当于从[10, 12, 14, 16, ... 96, 98]序列中获取一个随机数。 21 # random.randrange(10, 100, 2)在结果上与 random.choice(range(10, 100, 2) 等效。 22 23 print('从序列中获取一个随机元素。') 24 print(random.choice('liukuni')) #i #从字符串,列表,元组,字典里随机取值 25 #random.choice从序列中获取一个随机元素。 26 # 其函数原型为:random.choice(sequence)。参数sequence表示一个有序类型。 27 # 这里要说明一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。 28 # list, tuple, 字符串都属于sequence。有关sequence可以查看python手册数据模型这一章。 29 30 31 32 #random.sample的函数原型为: 33 #random.sample(sequence, k), 34 #从指定序列中随机获取指定长度的片断。 35 #sample函数不会修改原有序列。 36 37 38 print('-------#实际应用:------------') 39 #!/usr/bin/env python 40 # encoding: utf-8 41 import random 42 import string 43 44 print('-------#随机整数:------------') 45 print( random.randint(0,99)) #70 46 47 print('-------#随机选取0到100间的偶数:------------') 48 print(random.randrange(0, 101, 2)) #4 49 50 print('-------#随机浮点数::------------') 51 print( random.random()) #0.2746445568079129 52 print(random.uniform(1, 10)) #9.887001463194844 #增加区间的功能 53 54 print('-------#随机字符:------------') 55 print(random.choice('abcdefg&#%^*f')) #f 56 print(random.choice("学习Python"))#学 57 print(random.choice(["JGood","is","a","handsome","boy"])) #List 58 print(random.choice(("Tuple","List","Dict"))) #List 59 60 print('-------#多个字符中选取特定数量的字符:------------') 61 print(random.sample('abcdefghij',3)) #['f', 'h', 'd'] 62 print(random.sample([1,2,3,4,5],3)) #[1, 2, 5] #从前面,随机取(参数:3)位 63 64 print('-------#随机选取字符串:------------') 65 print( random.choice ( ['apple', 'pear', 'peach', 'orange', 'lemon'] )) #apple 66 67 print('-------#洗牌#:------------') 68 items = [1,2,3,4,5,6,7] 69 print(items) #[1, 2, 3, 4, 5, 6, 7] 70 random.shuffle(items) #shuffle() 方法将序列的所有元素随机排序 71 print(items) #[1, 4, 7, 2, 5, 3, 6] 72 73 74 print('-------生成随机验证码:------------') 75 import random 76 checkcode = '' #定义全局变量 77 for i in range(6): 78 current = random.randrange(0,6) 79 if current != i: 80 temp = chr(random.randint(65,90)) #chr()数字转换成ASCII, 81 else: 82 temp = random.randint(0,9) 83 checkcode += str(temp) 84 print (checkcode) 85 86 87 88 #String(字符串)import string 89 print('-------string类型介绍------------') 90 import random 91 import string 92 a = string.__all__ #类型介绍 93 b = string.ascii_letters #大小写字母 94 c = string.ascii_lowercase #小写字母 95 d = string.ascii_uppercase #大写字母 96 e = string.digits #0-9 97 f = string.hexdigits #0-9,a-f,A-F 98 g = string.octdigits #0-7 99 h = string.printable #0-9,大小写字母,标点符号 100 i = string.punctuation #标点符号 101 j = string.whitespace #空格 102 103 print(a) 104 print('-------分割为了看的更清楚------------') 105 print(b) 106 print(c) 107 print(d) 108 print(e) 109 print(f) 110 print(g) 111 print(h) 112 print('-------分割为了看的更清楚------------') 113 print(i) 114 print('-------分割为了看的更清楚------------') 115 print(j) 116 117 118 119 print('-------随机函数测试string------------') 120 x = random.choice(f) 121 y = random.sample(f,5) 122 print('-------用随机选取字符串测试string------------') 123 print(x) 124 print('-------用多个字符中选取特定数量的字符测试string------------') 125 print(y)
1 # import os 2 # help(os) 3 # print(os)模块 4 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 5 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd 6 os.curdir 返回当前目录: ('.') 7 os.pardir 获取当前目录的父目录字符串名:('..') 8 os.makedirs('dirname1/dirname2') 可生成多层递归目录 9 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 10 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname 11 os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname 12 os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 13 os.remove() 删除一个文件 14 os.rename("oldname","newname") 重命名文件/目录 15 os.stat('path/filename') 获取文件/目录信息 16 #重要 17 os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/" 18 os.linesep 输出当前平台使用的行终止符,win下为"\r\n",Linux下为"\n" 19 os.pathsep 输出用于分割文件路径的字符串 20 os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' 21 os.system("bash command") 运行shell命令,直接显示 22 os.environ 获取系统环境变量 字典模式{k:v} 23 #重要 24 # (path)路径 (r'c:\a\b\c\d\a.txt') 25 os.path.abspath(path) 返回path规范化的绝对路径 26 os.path.split(path) 将path分割成目录和文件名二元组返回(r'c:\a\b\c\d\a.txt') 27 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 28 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 29 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False 30 os.path.isabs(path) 如果path是绝对路径,返回True(r'c:\a') 31 os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False 32 os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False 33 os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 34 import os 35 x = os.path.join(r'c:',r'\a',r'\a.txt') 36 print (x) 37 os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 38 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 39 40 # sys模块 41 sys.argv 命令行参数List,第一个元素是程序本身路径 42 ['C:/Users/Administrator/AppData/Local/Programs/Python/Python36-32/212.py'] 43 sys.exit(n) 退出程序,正常退出时exit(0) 44 sys.version 获取Python解释程序的版本信息 45 sys.maxint 最大的Int值 46 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 47 sys.platform 返回操作系统平台名称 48 sys.stdout.write('please:') 49 val = sys.stdin.readline()[:-1]
try:
except:
1 #异常处理 2 try: 3 #name[3] 4 #data['name'] 5 #open('r') 6 a = 1 7 print (a) 8 except KeyError as e : 9 print ('没有这个KEY',e) 10 11 except IndexError as e : 12 print ('列表操作错误',e) 13 14 15 except (KeyError,IndexError) as e : 16 print ('多个错误统一处理',e) 17 18 19 except Exception as e : 20 print ('所有的错误都处理,未知错误使用',e) 21 22 23 else: 24 print ('一切正常打印这个') 25 26 finally: 27 print ('不管有没有错误,都执行')
1 #1、异常基础 2 #在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户, 3 # 而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!! 4 5 try: 6 pass 7 except Exception as ex: 8 pass 9 10 11 print('需求:将用户输入的两个数字相加,输入字母或者其他报错') 12 while True: 13 num1 = input('num1:') 14 num2 = input('num2:') 15 try: 16 num1 = int(num1) 17 num2 = int(num2) 18 result = num1 + num2 19 except Exception as e: 20 print('出现异常,信息如下:') 21 print(e)
1 ''' 2 2、异常种类 3 4 常用异常 5 6 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x 7 IOError 输入/输出异常;基本上是无法打开文件 8 ImportError 无法引入模块或包;基本上是路径问题或名称错误 9 IndentationError 语法错误(的子类) ;代码没有正确对齐 10 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] 11 KeyError 试图访问字典里不存在的键 12 KeyboardInterrupt Ctrl+C被按下 13 NameError 使用一个还未被赋予对象的变量 14 SyntaxError Python 代码非法,代码不能编译(个人认为这是语法错误,写错了) 15 TypeError 传入对象类型与要求的不符合 16 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量, 17 导致你以为正在访问它 18 ValueError 传入一个调用者不期望的值,即使值的类型是正确的 19 20 常用异常 21 ''' 22 23 print('----以下实例,异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。----') 24 dic = ["wupeiqi", 'alex'] 25 try: 26 dic[10] 27 except IndexError as e: 28 print (e) 29 30 31 dic = {'k1':'v1'} 32 try: 33 dic['k20'] 34 except KeyError as e: 35 print (e) 36 37 38 s1 = 'hello111111111111111' 39 try: 40 int(s1) 41 except ValueError as e: 42 print (e) 43 44 45 print('-----未捕获到异常,程序直接报错---不演示了,自己测试吧-----') 46 47 ''' 48 s1 = 'hello222222222222' 49 try: 50 int(s1) 51 except IndexError as e: 52 print (e) 53 ''' 54 55 print('-----所以,写程序时需要考虑到try代码块中可能出现的任意异常,可以这样写:') 56 57 s1 = 'hello33333333333333' 58 try: 59 int(s1) 60 except IndexError as e: 61 print (e) 62 except KeyError as e: 63 print (e) 64 except ValueError as e: 65 print (e) 66 67 68 print('-----万能异常 在python的异常中,有一个万能异常:Exception,他可以捕获任意异常,即:') 69 70 s1 = 'hello4444444444444444' 71 try: 72 int(s1) 73 except Exception as e: 74 print (e) 75 76 print('----接下来你可能要问了,既然有这个万能异常,其他异常是不是就可以忽略了!----') 77 print('----答:当然不是,对于特殊处理或提醒的异常需要先定义,最后定义Exception来确保程序正常运行。----') 78 79 s1 = 'hello5555555555555555' 80 try: 81 int(s1) 82 except KeyError as e: 83 print( '键错误') 84 except IndexError as e: 85 print ('索引错误') 86 except Exception as e: 87 print ('错误') 88 89 90 91 print('--------异常其他结构--------') 92 try: 93 #name[3] 94 #data['name'] 95 #open('r') 96 a = 1 97 print (a) 98 except KeyError as e : 99 print ('没有这个KEY',e) 100 101 except IndexError as e : 102 print ('列表操作错误',e) 103 104 105 except (KeyError,IndexError) as e : 106 print ('多个错误统一处理',e) 107 108 109 except Exception as e : 110 print ('所有的错误都处理,未知错误使用',e) 111 112 113 else: 114 print ('一切正常打印这个') 115 116 finally: 117 print ('不管有没有错误,都执行') 118 119 120 print('------------------主动触发异常---------------') 121 try: 122 raise Exception('错误了。。。') 123 except Exception as e: 124 print (e) 125 126 127 print('------------------主动触发异常222222222222222222---------------') 128 s1 = 'hello' 129 try: 130 int(s1) 131 except ValueError as e: 132 print(e) 133 134 135 136 print('---------自定义异常--------') 137 class AlexException(Exception): 138 def __init__(self,msg): 139 self.message = msg 140 #def __str__(self): 141 # return '替换了,自定义的异常' 142 143 try: 144 raise AlexException('自定义的异常,数据库连不上,我自己定义的异常') 145 except AlexException as e: 146 print(e) 147 148 149 150 print('---------------断言------# assert 条件--------') 151 152 assert 1 == 1 # 条件成立,则继续执行下面的代码 153 154 print(''' 155 1、assert语句用来声明某个条件是真的。 156 2、如果你非常确信某个你使用的列表中至少有一个元素,而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句。 157 3、当assert语句失败的时候,会引发一AssertionError。 158 ''') 159 assert 1 == 2 # 条件不成立,则报错
1 ArithmeticError 2 AssertionError 3 AttributeError 4 BaseException 5 BufferError 6 BytesWarning 7 DeprecationWarning 8 EnvironmentError 9 EOFError 10 Exception 11 FloatingPointError 12 FutureWarning 13 GeneratorExit 14 ImportError 15 ImportWarning 16 IndentationError 17 IndexError 18 IOError 19 KeyboardInterrupt 20 KeyError 21 LookupError 22 MemoryError 23 NameError 24 NotImplementedError 25 OSError 26 OverflowError 27 PendingDeprecationWarning 28 ReferenceError 29 RuntimeError 30 RuntimeWarning 31 StandardError 32 StopIteration 33 SyntaxError 34 SyntaxWarning 35 SystemError 36 SystemExit 37 TabError 38 TypeError 39 UnboundLocalError 40 UnicodeDecodeError 41 UnicodeEncodeError 42 UnicodeError 43 UnicodeTranslateError 44 UnicodeWarning 45 UserWarning 46 ValueError 47 Warning 48 ZeroDivisionError 49 50 更多异常
exit()
1 Python里 os._exit() sys.exit() exit() 的区别 2 3 Python退出程序的方式有两种:os._exit(), sys.exit() 4 1)os._exit() 直接退出 Python程序,其后的代码也不会继续执行。 5 6 2)sys.exit() 引发一个 SystemExit异常,若没有捕获这个异常,Python解释器会直接退出; 7 捕获这个异常可以做一些额外的清理工作。 8 0为正常退出,其他数值(1-127)为不正常,可抛异常事件供捕获。 9 10 3) exit() 跟 C 语言等其他语言的 exit() 应该是一样的。 11 os._exit() 调用 C 语言的 _exit() 函数。 12 13 14 os._exit() 用于在线程中退出 15 sys.exit() 用于在主线程中退出。
您的资助是我最大的动力!
金额随意,欢迎来赏!
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的
因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【颜言】!