鱼C论坛

 找回密码
 立即注册
查看: 1730|回复: 6

[已解决]将数字转化成LCD形式代码不理解

[复制链接]
发表于 2021-1-11 06:57:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 跳起来学编程 于 2021-1-11 07:15 编辑
font =""" _     _  _     _  _  _  _  _ 
| |  | _| _||_||_ |_   ||_||_|
|_|  ||_  _|  | _||_|  ||_| _|"""
while True:
    num = input('请输入数字:')
    if num.isdigit():
        break
    else:
        print('输入错误!', end = '')
for line in range(3):
    for n in num:
        print(font[31 * line + int(n) * 3: 31 * line + int(n) * 3 + 3], end = '')
    print() 
最佳答案
2021-1-11 09:12:28
font =""" _     _  _     _  _  _  _  _ 
| |  | _| _||_||_ |_   ||_||_|
|_|  ||_  _|  | _||_|  ||_| _|"""
print(font)#我们直接将font打印看看他到底是什么状态
'''
 _     _  _     _  _  _  _  _ 
| |  | _| _||_||_ |_   ||_||_|
|_|  ||_  _|  | _||_|  ||_| _|
'''
#上面就是font的实际状态,因为代码中没有对齐,所以看起来有点别扭

print(len(font))#我们打印一下font的整体字符串长度,是92


for i in font.split("\n"):
    print(len(i))#分别打印每行字符串长度,结果是30,30,30,每个数字分别由3个长度坐标组成
    #为什么加起来是90而不是92,因为字符串font本身含有两个换行符,所以后边用31作公因数
    
while True:
    num = input('请输入数字:')
    if num.isdigit():#检验输入是否完全由数字组成
        break
    else:
        print('输入错误!', end = '')

for line in range(3):#line==0,1,2  31*line 就分别是 0,31,62,就是每一行的第一个字符位置
    for n in num:
        a = 31 * line + int(n) * 3 #分别打印num组成数字的每行的开始坐标
        b = 31 * line + int(n) * 3 + 3#分别打印num组成数字的每行的结束坐标
        print(font[31 * line + int(n) * 3: 31 * line + int(n) * 3 + 3], end = '')
        #相当于 print(font[a:b],end=''),for循环内不换行,因为num还没打印完毕,否则散架了
    print() #此时打印打印换行,因为line是逐行打印,由3行组成,本质就是font的新组合方式显示num
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-1-11 06:59:28 | 显示全部楼层

        print(font[31 * line + int(n) * 3: 31 * line + int(n) * 3 + 3], end = '')
    print()
这串代码不理解  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-11 07:13:42 | 显示全部楼层
删去最后一行代码则打印笔画数,不能打印出成形的lcd数字形式,不懂为什么要这样写还是这个31是?....3:31是切片吗?....我好蔡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-11 07:18:06 From FishC Mobile | 显示全部楼层

回帖奖励 +4 鱼币

列表切片,加个括号上去就清楚了
print(font[(31 * line + int(n) * 3) : (31 * line + int(n) * 3 + 3)], end = '')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-11 07:24:26 | 显示全部楼层
hrp 发表于 2021-1-11 07:18
列表切片,加个括号上去就清楚了
print(font[(31 * line + int(n) * 3) : (31 * line + int(n) * 3 + 3)], ...

为啥要乘个31
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-11 09:01:34 | 显示全部楼层

回帖奖励 +4 鱼币

好像也不是很正确啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-11 09:12:28 | 显示全部楼层    本楼为最佳答案   
font =""" _     _  _     _  _  _  _  _ 
| |  | _| _||_||_ |_   ||_||_|
|_|  ||_  _|  | _||_|  ||_| _|"""
print(font)#我们直接将font打印看看他到底是什么状态
'''
 _     _  _     _  _  _  _  _ 
| |  | _| _||_||_ |_   ||_||_|
|_|  ||_  _|  | _||_|  ||_| _|
'''
#上面就是font的实际状态,因为代码中没有对齐,所以看起来有点别扭

print(len(font))#我们打印一下font的整体字符串长度,是92


for i in font.split("\n"):
    print(len(i))#分别打印每行字符串长度,结果是30,30,30,每个数字分别由3个长度坐标组成
    #为什么加起来是90而不是92,因为字符串font本身含有两个换行符,所以后边用31作公因数
    
while True:
    num = input('请输入数字:')
    if num.isdigit():#检验输入是否完全由数字组成
        break
    else:
        print('输入错误!', end = '')

for line in range(3):#line==0,1,2  31*line 就分别是 0,31,62,就是每一行的第一个字符位置
    for n in num:
        a = 31 * line + int(n) * 3 #分别打印num组成数字的每行的开始坐标
        b = 31 * line + int(n) * 3 + 3#分别打印num组成数字的每行的结束坐标
        print(font[31 * line + int(n) * 3: 31 * line + int(n) * 3 + 3], end = '')
        #相当于 print(font[a:b],end=''),for循环内不换行,因为num还没打印完毕,否则散架了
    print() #此时打印打印换行,因为line是逐行打印,由3行组成,本质就是font的新组合方式显示num
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 21:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表