@@ -176,7 +176,7 @@ print(scores)
176
176
177
177
<img src =" res/day09/lottery.png " style =" zoom :85% ;" >
178
178
179
- > ** 提示** :知乎上有一段对国内各种形式的彩票本质的论述相当精彩,这里分享给大家:“** 虚构一个不劳而获的人,去忽悠一群想不劳而获的人,最终养活一批真正不劳而获的人** ”。很多对概率没有概念的人,甚至认为彩票中与不中的概率都是 50%;还有很多人认为如果中奖的概率是 1%,那么买 100 次就一定可以中奖,这些都是非常荒唐的想法。所以,** 珍爱生命,远离(任何形式的)赌博 ** !
179
+ > ** 提示** :知乎上有一段对国内各种形式的彩票本质的论述相当精彩,这里分享给大家:“** 虚构一个不劳而获的人,去忽悠一群想不劳而获的人,最终养活一批真正不劳而获的人** ”。很多对概率没有概念的人,甚至认为彩票中与不中的概率都是 50%;还有很多人认为如果中奖的概率是 1%,那么买 100 次就一定可以中奖,这些都是非常荒唐的想法。所以,** 珍爱生命,远离赌博,尤其是你对概率一无所知的情况下 ** !
180
180
181
181
下面,我们通过 Python 程序来生成一组随机号码。
182
182
@@ -268,6 +268,61 @@ for _ in range(n):
268
268
269
269
<img src =" res/day09/lottery_run_result.png " style =" zoom :35% ;" >
270
270
271
+ 这里顺便给大家介绍一个名为 rich 的 Python 三方库,它可以帮助我们用最简单的方式产生最漂亮的输出,你可以在终端中使用 Python 包管理工具 pip 来安装这个三方库,对于使用 PyCharm 的用户,当然要在 PyCharm 的终端窗口使用 pip 命令将 rich 安装到项目的虚拟环境中,命令如下所示。
272
+
273
+ ``` bash
274
+ pip install rich
275
+ ```
276
+
277
+ <img src =" res/day09/run_pip_in_terminal.png " style =" zoom :50% ;" >
278
+
279
+ 如上图所示,rich 安装成功后,我们可以用如下所示的代码来控制输出。
280
+
281
+ ``` python
282
+ """
283
+ 双色球随机选号程序
284
+
285
+ Author: 骆昊
286
+ Version: 1.3
287
+ """
288
+ import random
289
+
290
+ from rich.console import Console
291
+ from rich.table import Table
292
+
293
+ # 创建控制台
294
+ console = Console()
295
+
296
+ n = int (input (' 生成几注号码: ' ))
297
+ red_balls = [i for i in range (1 , 34 )]
298
+ blue_balls = [i for i in range (1 , 17 )]
299
+
300
+ # 创建表格并添加表头
301
+ table = Table(show_header = True )
302
+ for col_name in (' 序号' , ' 红球' , ' 蓝球' ):
303
+ table.add_column(col_name, justify = ' center' )
304
+
305
+ for i in range (n):
306
+ selected_balls = random.sample(red_balls, 6 )
307
+ selected_balls.sort()
308
+ blue_ball = random.choice(blue_balls)
309
+ # 向表格中添加行(序号,红色球,蓝色球)
310
+ table.add_row(
311
+ str (i + 1 ),
312
+ f ' [red] { " " .join([f " { ball:0>2d } " for ball in selected_balls])} [/red] ' ,
313
+ f ' [blue] { blue_ball:0>2d } [/blue] '
314
+ )
315
+
316
+ # 通过控制台输出表格
317
+ console.print(table)
318
+ ```
319
+
320
+ > ** 说明** :上面代码第 31 行使用了列表生成式语法将红色球号码处理成字符串并保存在一个列表中,` " ".join([...]) ` 是将列表中的多个字符串用空格拼接成一个完整的字符串,如果不理解可以先放放。字符串中的` [red]...[/red] ` 用来设置输出颜色为红色,第 32 行的` [blue]...[/blue] ` 用来设置输出颜色为蓝色。更多关于 rich 库的知识,可以参考[ 官方文档] ( https://github.com/textualize/rich/blob/master/README.cn.md ) 。
321
+
322
+ 最终的输出如下图所示,看着这样的输出,是不是心情更美好了一些。
323
+
324
+ <img src =" res/day09/output_using_rich.png " style =" zoom :50% ;" >
325
+
271
326
### 总结
272
327
273
328
Python 中的列表底层是一个可以动态扩容的数组,列表元素在计算机内存中是连续存储的,所以可以实现随机访问(通过一个有效的索引获取对应的元素且操作时间与列表元素个数无关)。我们可以暂时不去触碰这些底层的存储细节,也不需要大家理解列表每个方法的渐近时间复杂度(执行方法耗费的时间跟列表元素个数之间的关系),大家先学会用列表解决工作中的问题,我想这一点更为重要。
0 commit comments