- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python通过类的组合模拟街道红绿灯由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
一,红绿灯揭示板案例思路 。
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命令行中运行.
二,红绿灯揭示板代码的呈现 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
|
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 。
最后此篇关于Python通过类的组合模拟街道红绿灯的文章就讲到这里了,如果你想了解更多关于Python通过类的组合模拟街道红绿灯的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在尝试使用 html5 创建一个世界,或者更确切地说以第一人称视角创建一条街道,而不使用 WebGL。 不幸的是,我找不到任何可以使用的引擎。有谁知道可以做到这一点的引擎,还是我必须自己编写引擎?
在我的 Android 应用程序中,我包含了谷歌地图。现在我想获取有关您周围地区的信息。例如,你是在公园/森林/海滩……所以我基本上想要一个用“水”回答输入坐标 53°33'40.9"N 10°00'
在 9535 上发出的 HERE 自动完成 API 请求返回 5 个结果,这些结果都与结果类型 street 匹配,而不是像 Google 那样匹配 postalCode默认情况下的 map 。例如
我正在考虑一个项目,我需要标题中描述的信息。 Google Maps API 是否提供此类信息,或者有人知道如何获取这些信息吗? 项目将使用 PHP、HTML 和 Javascript 完成。 最佳答
如果地址可以由子元素组成:Street、City、State、PostalCode...您如何允许此 XML: Somestreet zip
有没有办法使用 Google Maps API V3 突出显示指定的道路或街道? 这是我想要获取的示例(来自在谷歌中搜索某个地方的图像):example 样式化 map 不能满足我的要求,因为它适用于
我想创建一个应用程序来跟踪安装我的应用程序的用户,因此我有以下用于跟踪的代码,该代码运行良好,但它只会返回城市名称。但我需要完整的详细信息,例如街道名称、城市,等等。 public class
我正在创建一项服务,用户可以在其中访问世界任何地方的地址。首先,我认为 Google Places API 会很高兴,但看看这张图片(下图),问题是如何以正确的顺序过滤掉国家、城镇、街道地址。首先,我
如何将 ESRI 街道 map ( https://leaflet-extras.github.io/leaflet-providers/preview/#filter=Esri.WorldStree
一个简短的问题,希望有人能解答: 如何使用 Here Android SDK Premium 导航通过 DIR_NO_CARS、NO_THROUGH_TRAFFIC、DIR_NO_TRUCKS 属性的
我正在开发 Google 地点自动完成服务,我需要过滤特定于国家/地区的地点! 引用网站:-- https://www.grubhub.com (特定国家/地区、城邦-邮政编码) 我找到了一个例子:-
我有两个 PCollections:一个从 Pub/Sub 中提取信息,另一个从 CSV 文件中提取数据。在每个管道中进行一些不同的转换之后,我想将两者合并到它们共享的公共(public) key “
DSMOD 似乎没有能力更新用户的这部分 AD 属性(街道、邮政信箱、城市、州、邮政编码)。有没有我可以从 powershell 或 cmd 运行的命令行替代方案? 动机:我正在尝试用特定的用户信息填
DSMOD 似乎没有能力更新用户的这部分 AD 属性(街道、邮政信箱、城市、州、邮政编码)。有没有我可以从 powershell 或 cmd 运行的命令行替代方案? 动机:我正在尝试用特定的用户信息填
我想在 OSM 中的两点之间画一条线,但我找不到任何可以帮助我的东西。像 googlemap 中的 Polyline 之类的东西。 public class MainActivity extends
我正在使用 PKPaymentAuthorizationViewController 及其委托(delegate)方法集成 Apple Pay。当用户更改地址时,将触发以下委托(delegate)方法
我需要使用 Xamarin Forms/Android 的 Intent 以编程方式打开 Android 联系人应用程序。当“添加新联系人” Activity/屏幕出现时,我想用以下字段预先填充它:
我是一名优秀的程序员,十分优秀!