疯狂Python讲义之流程控制实例笔记10

目录

1. 数字转人民币读法

2. 绕圈圈

3. 控制台五子棋

4. 控制台超市系统

5. 九九乘法表


拷贝的源码,没有太多要描述的

1. 数字转人民币读法

将一个浮点数转换成人民币读法的字符串

'''
  把一个浮点数分解成整数部分和小数部分字符串
  num 需要被分解的浮点数
  返回分解出来的整数部分和小数部分。
  第一个数组元素是整数部分,第二个数组元素是小数部分
'''
def divide(num):
    # 将一个浮点数强制类型转换为int型,即得到它的整数部分
    integer = int(num)
    # 浮点数减去整数部分,得到小数部分,小数部分乘以100后再取整得到2位小数
    fraction = round((num - integer) * 100)
    # 下面把整数转换为字符串
    return (str(integer), str(fraction))

han_list = ["零" , "壹" , "贰" , "叁" , "肆" ,\
    "伍" , "陆" , "柒" , "捌" , "玖"]
unit_list = ["十" , "百" , "千"]
'''
  把一个四位的数字字符串变成汉字字符串
  num_str 需要被转换的四位的数字字符串
  返回四位的数字字符串被转换成汉字字符串
'''
def four_to_hanstr(num_str):
    result = ""
    num_len = len(num_str)
    # 依次遍历数字字符串的每一位数字
    for i in range(num_len) :
        # 把字符串转成数值
        num = int(num_str[i])
        # 如果不是最后一位数字,而且数字不是零,则需要添加单位(千、百、十)
        if i != num_len - 1 and num != 0 :
            result += han_list[num] + unit_list[num_len - 2 - i]
        # 否则不要添加单位
        else :
            result += han_list[num]
    return result
'''
  把数字字符串变成汉字字符串
  num_str 需要被转换的数字字符串
  返回数字字符串被转换成汉字字符串
'''
def integer_to_str(num_str):
    str_len = len(num_str)
    if str_len > 12 :
        print('数字太大,翻译不了')
        return
    # 如果大于8位,包含单位亿
    elif str_len > 8:
        return four_to_hanstr(num_str[:-8]) + "亿" + \
            four_to_hanstr(num_str[-8: -4]) + "万" + \
            four_to_hanstr(num_str[-4:])
    # 如果大于4位,包含单位万
    elif str_len > 4:
        return four_to_hanstr(num_str[:-4]) + "万" + \
            four_to_hanstr(num_str[-4:])
    else:
        return four_to_hanstr(num_str)
num = float(input("请输入一个浮点数: "))
# 测试把一个浮点数分解成整数部分和小数部分
integer, fraction = divide(num)
# 测试把一个四位的数字字符串变成汉字字符串
print(integer_to_str(integer))
print(fraction)

2. 绕圈圈

 找到图中①②③号转弯线之后,可以发现如下规则。

位于①号转弯线的行索引与列索引总和为n - 1 (即给定整数值减1 )。

位于②号转弯线的行索引与列索引相等。

位于③号转弯线的行索引等于列索引减1 。

SIZE = 7
array = [[0] * SIZE]
# 创建一个长度SIZE * SIZE的二维列表
for i in range(SIZE - 1):
    array += [[0] * SIZE]
# 该orient代表绕圈的方向
# 其中0代表向下,1代表向右,2代表向左,3代表向上
orient = 0
# 控制将1~SIZE * SIZE的数值填入二维列表中
# 其中j控制行索引,k控制列索引
j = 0
k = 0
for i in range(1, SIZE * SIZE + 1) :
    array[j][k] = i
    # 如果位于图4.2中①号转弯线上
    if j + k == SIZE - 1 :
        # j>k,位于左下角
        if j > k :
            orient = 1
        # 位于右上角
        else :
            orient = 2
    # 如果位于图5.2中②号转弯线上
    elif (k == j) and (k >= SIZE / 2) :
        orient = 3
    # 如果j位于图5.2中③号转弯线上
    elif (j == k - 1) and (k <= SIZE / 2) :
        orient = 0
    # 根据方向来控制行索引、列索引的改变
    # 如果方向为向下绕圈
    if orient == 0 :
        j += 1
    # 如果方向为向右绕圈
    elif orient == 1:
        k += 1
    # 如果方向为向左绕圈
    elif orient == 2:
        k -= 1
    # 如果方向为向上绕圈
    elif orient == 3:
        j -= 1
# 采用遍历输出上面的二维列表
for i in range(SIZE) :
    for j in range(SIZE) :
        print('%02d ' % array[i][j], end = "")
    print("")

3. 控制台五子棋

# 定义棋盘的大小
BOARD_SIZE = 15
# 定义一个二维列表来充当棋盘
board = []
def initBoard() :
    # 把每个元素赋为"╋",用于在控制台画出棋盘
    for i in range(BOARD_SIZE) :
        row = ["╋"] * BOARD_SIZE
        board.append(row)
# 在控制台输出棋盘的方法
def printBoard() :
    # 打印每个列表元素
    for i in range(BOARD_SIZE) :
        for j in range(BOARD_SIZE) :
            # 打印列表元素后不换行
            print(board[i][j], end="")
        # 每打印完一行列表元素后输出一个换行符
        print()
initBoard()
printBoard()
inputStr = input("请输入您下棋的坐标,应以x,y的格式:\n")
while inputStr != None :
    # 将用户输入的字符串以逗号(,)作为分隔符,分隔成2个字符串
    x_str, y_str = inputStr.split(sep = ",")
    # 把对应的列表元素赋为"●"。
    board[int(y_str) - 1][int(x_str) - 1] = "●"
    '''
     电脑随机生成2个整数,作为电脑下棋的坐标,赋给board列表
     还涉及
        1.坐标的有效性,只能是数字,不能超出棋盘范围
        2.下的棋的点,不能重复下棋
        3.每次下棋后,需要扫描谁赢了
    '''
    printBoard()
    inputStr = input("请输入您下棋的坐标,应以x,y的格式:\n")

4. 控制台超市系统

# 定义仓库
repository = dict()
# 定义购物清单对象
shop_list = []

# 定义一个函数来初始化商品
def init_repository():
    # 初始化了很多的商品,每个元组代表一个商品
    goods1 = ("1000001", "疯狂Ruby讲义", 88.0)
    goods2 = ("1000002", "疯狂Swift讲义", 69.0)
    goods3 = ("1000003", "疯狂Kotlin讲义", 59.0)
    goods4 = ("1000004", "疯狂Java讲义", 109.0)
    goods5 = ("1000005", "疯狂Android讲义", 108.0)
    goods6 = ("1000006", "疯狂iOS讲义", 77.0)
    # 把商品入库(放入dict中),条码作为key
    repository[goods1[0]] = goods1
    repository[goods2[0]] = goods2
    repository[goods3[0]] = goods3
    repository[goods4[0]] = goods4
    repository[goods5[0]] = goods5
    repository[goods6[0]] = goods6
# 显示超市的商品清单,就是遍历代表仓库的dict字典
def show_goods():
    print("欢迎光临 疯狂超市")
    print('疯狂超市的商品清单:')
    print("%13s%40s%10s" % ("条码", "商品名称", "单价"))
    # 遍历repository的所有value来显示商品清单
    for goods in repository.values():
        print("%15s%40s%12s" % goods)
# 显示购物清单,就是遍历代表购物清单的list列表
def show_list():
    print("=" * 100)
    # 如果清单不为空的时候,输出清单的内容
    if not shop_list:
        print("还未购买商品")
    else:
        title = "%-5s|%15s|%40s|%10s|%4s|%10s" % \
            ("ID", "条码", "商品名称", "单价", "数量", "小计")
        print(title)
        print("-" * 100)
        # 记录总计的价钱
        sum = 0
        # 遍历代表购物清单的list列表
        for i, item in enumerate(shop_list):
            # 转换id为索引加1
            id = i + 1
            # 获取该购物项的第1个元素:商品条码
            code = item[0]
            # 获取商品条码读取商品,再获取商品的名称
            name = repository[code][1]
            # 获取商品条码读取商品,再获取商品的单价
            price = repository[code][2]
            # 获取该购物项的第2个元素:商品数量
            number = item[1]
            # 小计
            amount = price * number
            # 计算总计
            sum = sum + amount
            line = "%-5s|%17s|%40s|%12s|%6s|%12s" % \
                (id, code, name, price, number, amount)
            print( line )
        print("-" * 100)
        print("                          总计: " , sum)
    print("=" * 100)
# 添加购买商品,就是向代表用户购物清单的list列表中添加一项。
def add():
    # 等待输入条码
    code = input("请输入商品的条码:\n")
    # 没有找到对应的商品,条码错误
    if code not in repository:
        print("条码错误,请重新输入")
        return        
    # 根据条码找商品
    goods = repository[code]
    # 等待输入数量
    number = input("请输入购买数量:\n")
    # 把商品和购买数量封装成list后加入购物清单
    shop_list.append([code, int(number)])
# 修改购买商品的数量,就是修改代表用户购物清单的list列表的元素
def edit():
    id = input("请输入要修改的购物明细项的ID:\n")
    # id减1得到购物明细项的索引
    index = int(id) - 1
    # 根据索引获取某个购物明细项
    item = shop_list[index]
    # 提示输入新的购买数量
    number = input("请输入新的购买数量:\n")
    # 修改item里面的number
    item[1] = int(number)
# 删除购买的商品明细项,就是删除代表用户购物清单的list列表的一个元素。
def delete():
    id = input("请输入要删除的购物明细项的ID: ")
    index = int(id) - 1
    # 直接根据索引从清单里面删除掉购物明细项
    del shop_list[index]
def payment():
    # 先打印清单
    show_list()
    print('\n' * 3)
    print("欢迎下次光临")
    # 退出程序
    import os
    os._exit(0) 
cmd_dict = {'a': add, 'e': edit, 'd': delete, 'p': payment, 's': show_goods}
# 显示命令提示
def show_command():
    # 等待命令
    cmd = input("请输入操作指令: \n" +
        "    添加(a)  修改(e)  删除(d)  结算(p)  超市商品(s)\n")
    # 如果用户输入的字符没有对应的命令   
    if cmd not in cmd_dict:
        print("不要玩,好不好!")
    else:
        cmd_dict[cmd]()
init_repository()
show_goods()
# 显示清单和操作命令提示
while True:
    show_list()
    show_command()

5. 九九乘法表

# coding: utf-8
#  1...n *m


def mut_m(num) :
    i= 1
    for i in range(1, num+1):
        print("%d X %d = %d " %(i, num, i*num),end="")
        if i == num:
            print("")
        else:
            print(",",end="")


number = 9
for i in range(1, number+1):
    mut_m(i)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值