《Python编程快速上手——让繁琐的工作自动化》(第二版)第四章实践项目

4.11.1 逗号代码

编写一个函数,它以一个列表作值作为参数,返回一个字符串。该字符串包含所有表项,表项之间以逗号和空格分隔,并在最后一个表项之前插入and。

具体代码如下:

def listing(list):
    str = ''
    for i in range(len(list)):
        if i == len(list)-2:
            str += f'{list[i].title()} and '
        elif i == len(list)-1:
            str += f'{list[i].title()}'
        else:
            str += f'{list[i].title()}, '
    return str


language = ['c++', 'c', 'python','java', 'javasprit', 'r']

message = listing(language)
print(message)

4.11.2 掷硬币的连胜

在本次练习中,我们将尝试做,一个实验。如果你掷硬币100次,并在每次正面时写下“H”,在每次反面时写下“T”,就会创建一个看起来像“TTTHHTHTTHHHH”这样的列表。如果你要求一个人进行100次随机掷硬币,你可能会得到正反交替的结果,例如“HHTTHTTTHHHT”。

编写一个程序,计算随机生成的正面和反列表中出现连续6个正面或者6个反面的频率。将程序分成两个部分:

第一部分,创建一个函数,生成随机选择的“正面”和“反面”值的列表。

第二部分,检查其中是否由连续6个正面或者反面。

将这些代码放入一个循环中,重复实验1000次,检查出现连续6个正面或者反面的实验次数,并计算出现的频率。

具体代码如下:

调用random.randint(0, 1)来模拟掷硬币的结果。

import random

number_f = 0
number_n = 0
f = 'FFFFFF'
n = 'NNNNNN'


def decision():
    str = ''
    for i in range(100):
        number = random.randint(0, 1)
        if number == 0:
            str += 'N'
        else:
            str += 'F'
    return str


for experimentNumber in range(1000):
    experiment = decision()

    if f in experiment:
        number_f += 1
    if n in experiment:
        number_n += 1

print(f'The percentage of "FFFFFF" is {number_f / 10}%')
print(f'Tht percentage of "NNNNNN" is {number_n / 10}%')

4.11.3 字符图网格

假定有一个列表的列表,内层列表的每个值都是包含一个字符的字符串,像这样:

grid = [['.', '.', '.', '.', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['.', 'O', 'O', 'O', 'O', 'O'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.']]

你可以认为grid[x][y]是一幅“图”在x,y座标处的字符,该图由这些文本字符绘制而成。原点(0,0)在左上角,向右x坐标增加,向下y坐标增加。

复制前面的网格值,编写代码用它输出图像:

. . O O . O O . . 
. O O O O O O O . 
. O O O O O O O . 
. . O O O O O . . 
. . . O O O . . . 
. . . . O . . . . 

具体代码如下:

(这是一个心型,看出来了吗?为了让这个心型更美观一些,我们可以用空格连接列表的值。)

def picture(test):
    for j in range(len(test[0])):
        for i in range(len(test)):
            print(test[i][j], end=' ')
        print()


grid = [['.', '.', '.', '.', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['.', 'O', 'O', 'O', 'O', 'O'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.']]

picture(grid)

创作不易,请大家给个三连哦!!!

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值