Python通过类的组合模拟街道红绿灯
作者:秋天中的一片叶 发布时间:2021-04-13 02:00:24
一,红绿灯揭示板案例思路
1. 创建Traffic_light红绿灯类
(1)静态属性 :
<1> 绿灯时间,<2> 黄灯时间 , <3> 红灯时间, <4> 两块显示时间的电子屏
(2)动态属性
<1> 输入红黄绿时间函数(静态函数),<2> 红黄绿时间倒计时函数 ,
<3> 构造电子屏数字的显示函数,<4> 显示两块电子屏绑定两位数的显示函数
<5> 实例化对象展示电子屏函数
2. 电子屏类的创建(Light):
python中没有数组,因此自己创建函数把获取到的值存放到数组中
(存放内容: 20行,10列的布尔值)
3. input_time(color:str)函数的创建
<1> 导入colorama包并初始化实现windows命令行下颜色字体打印效果
<2> 输入红黄绿时间的字体成对应的颜色
<3> 通过colorama类方法实现输入的红黄绿时间为对应的颜色展示
<4> 对输入的数字进行校验(必须为1-99之间的正数。因为一块电子屏只记录一位数字)
<5> 返回相应的值
4. Countdown数字倒计时函数的创建
<1> 通过while循环让三个灯的状态一直循环持续
<2> 对于红黄绿灯输入的数字进行递减打印流程如下
#流程: 清屏-->打印完后 -->暂停1秒钟-->清屏 -->数字减一后再打印-->再暂停1秒钟-->清屏-->再数字减一打印
<3> 导入time,os,colorama等需要的包
5.build_LED_number函数的创建
之前创建的电子屏是默认False的状态。分别构造0-9的状态在电子屏中True的状态的显示
6.print_LED函数的创建
两块电子屏,分别显示输入时间的第一位和第二位数字.如果数字为单数则前面用零补齐的方法显示。两块屏并排显示每一位数字,从而展示电子版的效果
7.注意事项:
因为我们用到了os,及colorama类。所以最终效果的展示不是在pycharm中展示。而是在windows的cmd命令行中展示。
原因是因为我们代码中调用了os.system("cls")这个清屏命令。在pycharm中是很难做到清屏的效果。
另外在pycharm中对于电子屏的展示效果也不如windows cmd中展示的效果俱佳。因此运行程序是请在windows命令行中运行。
二,红绿灯揭示板代码的呈现
import time
import os
from colorama import init,Fore,Back,Style
#命令行模式字体颜色初始化
init(autoreset=True)
#电子屏类
class Light:
#构造函数
def __init__(self):
self.light = [] #存储行列数组的集合
#自动初始化
self.prepare_light()
def prepare_light(self):
"""
电子屏的创建
python中没有数组.因此通过类,函数来创建数组得到一个20行10列的数组
:return:
"""
for row in range(20): #20行
temp = [] # 临时存储每行10个圈
for col in range(10): #10列
temp.append(False) #默认灯都是不亮的因此通过布尔类型的False表示不亮的状态
#把行列排的200个灯的状态存入到light集合中
self.light.append(temp)
#红绿灯类
class Traffic_light:
#构造函数,静态属性
def __init__(self,green_time,yellow_time,rea_time):
self.green_time = green_time #绿灯时间
self.yellow_time = yellow_time #黄灯时间
self.red_time = rea_time #红灯时间
#通过类的组合调用Light类函数
self.number01 = Light() #创建第一个电子屏
self.number02 = Light() #创建第二个电子屏
#红黄绿等时间倒计时函数
def countdown(self):
while True:
#流程: 清屏-->打印完后 -->暂停1秒钟-->清屏 -->数字减一后再打印-->再暂停1秒钟-->清屏-->再数字减一打印
for number in range(self.green_time,-1,-1):
#第一个-1代表取值到0,如果设置0则取值取不到0.第二个-1代表数字减一
os.system("cls") #清屏
self.start_display(number,"green") #调用start_display函数传数字及颜色
time.sleep(1) #停止一秒钟
# 黄灯倒计时
for number in range(self.yellow_time,-1,-1):
os.system("cls") #清屏
self.start_display(number,"yellow")
time.sleep(1) #停止一秒钟
# 红灯倒计时
for number in range(self.red_time,-1,-1):#第一个-1代表取值到0,如果设置0则取值取不到0.第二个-1代表数字减一
os.system("cls") #清屏
self.start_display(number,"red")
time.sleep(1) #停止一秒钟
@staticmethod #静态方法不需要初始化
def input_time(color:str):
# 设置全局变量(便于静态方法使用)
time = ""
while True:
if color.lower() in ["green","绿色","绿","绿灯"]:
print(Fore.GREEN + "请输入绿灯的时间:",end="") #实现打印字体呈现颜色效果
time = input()
if color.lower() in ["yellow", "黄色", "黄", "黄灯"]:
print(Fore.YELLOW + "请输入黄灯的时间:", end="")
time = input()
if color.lower() in ["red", "红色", "红", "红灯"]:
print(Fore.RED + "请输入红灯的时间:", end="")
time = input()
#校验输入的是否合规
if not time.isdigit():
print("输入的值不符合要求。【要求:必须是1-99之间的正数。】")
continue
else:
time_number = int(time) # 因为time是字符串.拿到数字后转成Int类型再判断
if time_number < 1 or time_number > 99:
print("输入的值不符合要求。【要求:必须是1-99之间的正数。】")
continue
else:
return time_number
def build_LED_number(self,char:str):
"""
:param char: LED灯数字的构造
:return: 返回temp_LED这个数组
"""
temp_LED = Light() #临时创建新的数组
if char == "0": #构造0
for row in range(20):
for col in range(10):
if row < 2: #最上面两列
temp_LED.light[row][col] = True
if row > 17: #最下面两列
temp_LED.light[row][col] = True
if col < 2:#最左边两列
temp_LED.light[row][col] = True
if col > 7: #最后面两列
temp_LED.light[row][col] = True
elif char == "1": #构造1
for row in range(20):
for col in range(10):
if col > 7: #最后面两列
temp_LED.light[row][col] = True
elif char == "2": #构造2
for row in range(20):
for col in range(10):
if row < 2: # 最上面两列
temp_LED.light[row][col] = True
if col > 7 and row < 9: # 最后面两列
temp_LED.light[row][col] = True
if row == 9 or row == 10: # 中间两行
temp_LED.light[row][col] = True
if col < 2 and row >10: #左边列
temp_LED.light[row][col] = True
if row > 17: # 最下面两列
temp_LED.light[row][col] = True
elif char == "3": #构造3
for row in range(20):
for col in range(10):
if row < 2: # 最上面两列
temp_LED.light[row][col] = True
if col > 7 : # 最后面两列
temp_LED.light[row][col] = True
if row == 9 or row == 10: # 中间两行
temp_LED.light[row][col] = True
if row > 17: # 最下面两列
temp_LED.light[row][col] = True
elif char == "4": # 构造4
for row in range(20):
for col in range(10):
if col < 2 and row <9: # 最上面两列
temp_LED.light[row][col] = True
if col > 7: # 最后面两列
temp_LED.light[row][col] = True
if row == 9 or row == 10: # 中间两行
temp_LED.light[row][col] = True
elif char == "5": # 构造5
for row in range(20):
for col in range(10):
if row < 2:
temp_LED.light[row][col] = True
if col < 2 and row < 9:
temp_LED.light[row][col] = True
if row == 9 or row == 10:
temp_LED.light[row][col] = True
if col > 7 and row > 10:
temp_LED.light[row][col] = True
if row > 17:
temp_LED.light[row][col] = True
elif char == "6": # 构造6
for row in range(20):
for col in range(10):
if row < 2:
temp_LED.light[row][col] = True
if col < 2:
temp_LED.light[row][col] = True
if row == 9 or row == 10:
temp_LED.light[row][col] = True
if col > 7 and row > 10:
temp_LED.light[row][col] = True
if row > 17:
temp_LED.light[row][col] = True
elif char == "7": # 构造7
for row in range(20):
for col in range(10):
if row < 2:
temp_LED.light[row][col] = True
if col > 7:
temp_LED.light[row][col] = True
elif char == "8": #构造8
for row in range(20):
for col in range(10):
if row < 2: #最上面两列
temp_LED.light[row][col] = True
if row > 17: #最下面两列
temp_LED.light[row][col] = True
if row == 9 or row == 10: # 中间两行
temp_LED.light[row][col] = True
if col < 2:#最左边两列
temp_LED.light[row][col] = True
if col > 7: #最后面两列
temp_LED.light[row][col] = True
elif char == "9": # 构造9
for row in range(20):
for col in range(10):
if row < 2: # 最上面两列
temp_LED.light[row][col] = True
if col < 2 and row < 9:
temp_LED.light[row][col] = True
if row > 17: # 最下面两列
temp_LED.light[row][col] = True
if row == 9 or row == 10: # 中间两行
temp_LED.light[row][col] = True
if col > 7: # 最后面两列
temp_LED.light[row][col] = True
#返回值
return temp_LED
def print_LED(self,color:str):
for row in range(20):
#打印第一个数
for col01 in range(10):
if self.number01.light[row][col01] == True:
if color == "green":
print(Fore.GREEN + "●",end="")
elif color == "yellow":
print(Fore.YELLOW + "●",end="")
elif color == "red":
print(Fore.RED + "●",end="")
else:
print(" ",end="") # 两个全角空格 注释:○占用的字符相当于两个全角空格的占位
print("\t",end="")
#打印第二个数
for col02 in range(10):
if self.number02.light[row][col02] == True:
if color == "green":
print(Fore.GREEN + "●",end="")
elif color == "yellow":
print(Fore.YELLOW + "●",end="")
elif color == "red":
print(Fore.RED + "●",end="")
else:
print(" ",end="")
#换行
print()
def start_display(self,number:int,color:str):
"""
电子屏展示
:param number:电子屏上展示的数字
:param color: 电子屏上展示的颜色
:return:
"""
number_str = "%02d" % number #传进来的数字2位显示
self.number01 = self.build_LED_number(number_str[0]) #把数字的第一位给第一个电子屏
self.number02 = self.build_LED_number(number_str[1]) #把数字的第二位给第二个电子屏
#在电子屏上显示
self.print_LED(color)
if __name__ == "__main__":
green_time = Traffic_light.input_time("绿灯")
yellow_time = Traffic_light.input_time("黄灯")
red_time = Traffic_light.input_time("红灯")
#实例化
traffic01 = Traffic_light(green_time,yellow_time,red_time)
traffic01.countdown()
来源:https://www.cnblogs.com/liupengpengg/p/12882800.html


猜你喜欢
- 效果图如下所示:废话不多说了,直接给大家贴js代码了.<!DOCTYPE html><html lang="en
- 最近接触到一个心理学方面的理论:心流理论。大意是一种个人精力完全投注在某件事情上的感觉。心流产生时会有高度的兴奋和充实感。其实也就是说人在进
- 在生活之中,我们想要去一个很远的地方,可能先走到坐车的地方,再从乘车去目的地。那么,我们是不是可以理解成函数嵌套也是这样,需要不同函数的组合
- 首先看一下来自Wolfram的定义 马尔可夫链是随机变量{X_t}的集合(t贯穿0,1,..
- 我使用的是tensorflow-gpu (1.2.1)和Theano (0.9.0),2个4G显存Nvidia Quadro M2000 G
- import pyspherefrom pysphere import VIServerhost_ip = "200.200.17
- 一、argparse介绍官方文档argparse 模块是 Python 内置的一个用于命令项选项与参数解析的模块,argparse 模块可以
- 如下所示:#统计某文件夹下的所有csv文件的行数(多线程)import threadingimport csvimport osclass
- 一、Python解释器 安装Windows平台下载地址 https://www.python.org/ftp/python/3.9.5/py
- 官方文档:需求:当1个job启动构建后,获取它的构建状态.(成功,失败,驳回,构建中,正在排队)关键函数:获取job是否在排队的结果获取正在
- 一、 简介1、 基本介绍Pillow 是 Python 中较为基础的图像处理库,主要用于图像的基本处理,比如裁剪图像、调整图像大小和图像颜色
- 我就废话不多说了,直接上代码吧!# -*- coding: utf-8 -*-import pandas as pdimport matpl
- 一、背景python是一个动态语言,可以支持我们在运行时动态的给类、对象添加属性或者方法;但是如果我们想要限制可以添加的属性或方法该怎么办呢
- <script src="jquery.min.js" type="text/javascript&qu
- 很长时间以来,一直想将自己的一些零碎的想法总结下,给自己一个完整的思维,也算是做个存档。一家之言,绝不敢说对别人会有什么帮助,对外人的层面上
- 本文实例为大家分享了js+css实现换肤效果的具体代码,供大家参考,具体内容如下效果图如下:需求:点击对应小圆点,下面内容颜色跟着改变主要思
- 安装MySQL5.1过程中,我把以前MySQL5.0的GUI工具和服务器全部删掉,安装目录全部删掉,数据文件目录名字改掉,注册表用完美卸载清
- 推荐go学习书籍,点击链接跳转京东官方商城购买。服务端经常需要返回一个列表,里面包含很多用户数据,常规做法当然是遍历然后读缓存。使用Go语言
- 废话不多说,直接上代码!updateBody = { "query":{ &nb
- 本文讨论的是如果开发一个符合w3c标准的web站点,重点探讨在新的设计与开发模式下,web项目组中的美工/页面制作人员/后台程序员三者之间如