鱼C论坛

 找回密码
 立即注册
查看: 12580|回复: 49

[技术交流] python小练习(001):把数字转换成LCD显示模式

[复制链接]
发表于 2016-11-13 23:00:03 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 jerryxjr1220 于 2017-2-17 17:30 编辑

Python的编程技巧还是需要通过不断地练习来提高,所以准备从今天开始每天更新一个python小练习,欢迎大家一起交流,共同提高。

题目难度不会很大,新手完全可以一起参与。原则上前一天公布题目,后一天贴我的解法(未必是最佳答案,欢迎一起讨论)
''' Python小练习(001):
把数字(0~9)转换成LCD显示的模式。
例如:0:    1:     2:     3:     4:     5:     6:     7:     8:     9:
         _              _      _             _      _      _      _      _
        |  |     |      _|     _|    |_|    |_     |_       |    |_|    |_|
        |_|      |     |_      _|      |     _|    |_|      |    |_|     _|

如果输入数字: 1234, 输出:                  _      _        
                                   |      _|     _|    |_|
                                   |     |_      _|      |
'''
无标题.png
IMG_20161113_142019.jpg

评分

参与人数 2荣誉 +20 鱼币 +20 贡献 +6 收起 理由
小甲鱼 + 10 + 10 + 6 感谢楼主无私奉献!
冬雪雪冬 + 10 + 10 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-13 23:05:00 | 显示全部楼层
本帖最后由 jerryxjr1220 于 2016-11-14 20:15 编辑

我的解答
lcd={0:[' _  ','| | ','|_| '],\
     1:['    ','  | ','  | '],\
     2:[' _  ',' _| ','|_  '],\
     3:[' _  ',' _| ',' _| '],\
     4:['    ','|_| ','  | '],\
     5:[' _  ','|_  ',' _| '],\
     6:[' _  ','|_  ','|_| '],\
     7:[' _  ','  | ','  | '],\
     8:[' _  ','|_| ','|_| '],\
     9:[' _  ','|_| ',' _| ']}
#for i in range(10):
#        for e in lcd[i]:
#                print e

def number2lcd(n):
    global lcd
    output = ['','','']
    l = len(str(n))
    while True:
        i = n // 10**(l-1)
        for j in range(3):
            output[j] += lcd[i][j]
        n = n % 10**(l-1)
        l -= 1
        if l == 0:
            break
    return output

n = int(raw_input('Input the numbers:'))
output = number2lcd(n)
for each in output:
    print each
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-14 00:31:52 | 显示全部楼层
期待中,我也好好思考一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-14 09:40:30 | 显示全部楼层
还没看到答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-14 09:55:54 | 显示全部楼层
用3行字符串把0~9写出来。根据输入数字按位移取相应的笔画。
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() 
1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-14 14:00:58 | 显示全部楼层
本帖最后由 jerryxjr1220 于 2016-11-14 14:02 编辑
冬雪雪冬 发表于 2016-11-14 09:55
用3行字符串把0~9写出来。根据输入数字按位移取相应的笔画。


版主大大的解法已经很不错了,晚点贴我的解法,思路应该差不多。


我是用的字典的方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-14 14:49:26 | 显示全部楼层
dict1= {0:' - ',1:'   ',2:' - ',3:' - ',4:'   ',5:' - ',6:' - ',7:' - ',8:' - ',9:' - '}
dict2= {0:'| |',1:'  |',2:'  |',3:'  |',4:'| |',5:'|  ',6:'|  ',7:'  |',8:'| |',9:'| |'}
dict3= {0:'   ',1:'   ',2:' - ',3:' - ',4:' - ',5:' - ',6:' - ',7:'   ',8:' - ',9:' - '}
dict4= {0:'| |',1:'  |',2:'|  ',3:'  |',4:'  |',5:'  |',6:'| |',7:'  |',8:'| |',9:'  |'}
dict5= {0:' - ',1:'   ',2:' - ',3:' - ',4:'   ',5:' - ',6:' - ',7:'   ',8:' - ',9:' - '}
while (1):
    num=str(input('请输入整数:'))
    list1=[]
    list2=[]
    list3=[]
    list4=[]
    list5=[]

    for each in num:
        eachnum=int(each)
        list1.append(dict1[eachnum])
        list2.append(dict2[eachnum])
        list3.append(dict3[eachnum])
        list4.append(dict4[eachnum])
        list5.append(dict5[eachnum])
    for each in list1:
        print(each,end=' ')
    print(' ')
    for each in list2:
        print(each,end=' ')
    print(' ')
    for each in list3:
        print(each,end=' ')
    print(' ')
    for each in list4:
        print(each,end=' ')
    print(' ')
    for each in list5:
        print(each,end=' ')
    print(' ')
    input('请按回车键继续')
 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-14 20:20:57 | 显示全部楼层
更新完毕,见2楼解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-14 20:27:21 | 显示全部楼层
最新实现方法,欢迎指正
dict1={0:' - ',1:'   ',2:' - ',3:' - ',4:'   ',5:' - ',6:' - ',7:' - ',8:' - ',9:' - '}
dict2={0:'| |',1:'  |',2:'  |',3:'  |',4:'| |',5:'|  ',6:'|  ',7:'  |',8:'| |',9:'| |'}
dict3={0:'   ',1:'   ',2:' - ',3:' - ',4:' - ',5:' - ',6:' - ',7:'   ',8:' - ',9:' - '}
dict4={0:'| |',1:'  |',2:'|  ',3:'  |',4:'  |',5:'  |',6:'| |',7:'  |',8:'| |',9:'  |'}
dict5={0:' - ',1:'   ',2:' - ',3:' - ',4:'   ',5:' - ',6:' - ',7:'   ',8:' - ',9:' - '}
while 1:
    num=str(input('请输入整数:'))
    list1=[]
    list2=[]
    list3=[]
    list4=[]
    list5=[]

    for each in range(5):
        index=str(each+1)
        listname=eval('list'+index)
        dictname='dict'+index
        
        for eachnum in num:
            listname.append(str(eval('%s[%s]'%(dictname,eachnum))))
        for each in listname:
            print(each,end=' ')
        print(' ')
    input('请按回车键继续')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-14 22:09:33 | 显示全部楼层
fendoutaozi 发表于 2016-11-14 20:27
最新实现方法,欢迎指正

可以的,只要能实现的方法都是可以的。
开放性命题没有标准答案,目的是给大家多多练习编程的技巧。
用字典,列表,或者是字符串,都是可行的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-15 10:48:42 | 显示全部楼层
数字转换成LCD显示模式
f=(' _     _  _     _  _  _  _  _ ',
   '| |  | _| _||_||_ |_   ||_||_|',
   '|_|  ||_  _|  | _||_|  ||_| _|')

while 1:
    num = input('输入数字:')
    if num.isdigit(): break
        
print('\n'.join((''.join((f[row][int(n)*3:int(n)*3+3]for n in num))for row in range(3))))

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
梦想绘制者 + 5 + 5 + 3 简洁高效啊!厉害厉害,膜拜膜拜啊!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 3 反对 0

使用道具 举报

 楼主| 发表于 2016-11-15 11:47:05 | 显示全部楼层
SixPy 发表于 2016-11-15 10:48
数字转换成LCD显示模式

非常简洁!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-16 18:02:28 | 显示全部楼层
SixPy 发表于 2016-11-15 10:48
数字转换成LCD显示模式

可以运行,但是新手的我表示看不懂——
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-20 13:10:24 | 显示全部楼层
本帖最后由 梦想绘制者 于 2016-11-20 13:16 编辑
# Python 3.5 实现数字转换为LCD显示模式
#
''' 根据LCD显示的特点,可将所有数字的显示划分为三层

                  |_|
                  |_|
                  |_|
 
   实际上每层都是如下结构的循环
   
                  |_|
                
则可根据横竖线的有无来进行数字的编码
''' 

def display(dis_list):
    for each in dis_list:
        print(each, sep = '', end = '')

def enCoding(code_list):
    dis_list = []
    lenCode = len(code_list[0])
    for i in range(3):
        for j in range(lenCode):
            if j % 2 == 0:
                if code_list[i][j] == '1':
                    dis_list.append('|')
                else:
                    dis_list.append(' ')
            else:
                if code_list[i][j] == '1':
                    dis_list.append('_')
                else:
                    dis_list.append(' ')
        dis_list.append('\n')
    display(dis_list)

def Num2LCD(n):
    code_list = ['','','']
    for each_num in n:
        code_list[0] += (Num_dict[each_num][:3] + '0')
        code_list[1] += (Num_dict[each_num][3:6] + '0')
        code_list[2] += (Num_dict[each_num][6:] + '0')

    enCoding(code_list)


while 1:
    try:
        n = input('Input the numbers:')
        if n.isdigit():
            Num2LCD(n)
        else:
            print('What you entered is not a number, input a number again!')
    except KeyboardInterrupt:
        print('You close the program.')
>>>
Input the numbers:1234567890
     _   _       _   _   _   _   _   _  
|    _|  _| |_| |_  |_    | |_| |_| | |
|   |_   _|   |  _| |_|   | |_|  _| |_|
Input the numbers:123456qwer
What you entered is not a number, input a number again!
Input the numbers:
You close the program.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-20 14:24:19 | 显示全部楼层
# Python 3.5 实现数字转换为LCD显示模式
#
''' 根据LCD显示的特点,可将所有数字的显示划分为三层

                  |_|
                  |_|
                  |_|
 
   实际上每层都是如下结构的循环
   
                  |_|
                
则可根据横竖线的有无来进行数字的编码
''' 
Num_dict = {
    '0':'010101111',
    '1':'000001001',
    '2':'010011110',
    '3':'010011011',
    '4':'000111001',
    '5':'010110011',
    '6':'010110111',
    '7':'010001001',
    '8':'010111111',
    '9':'010111011',
    }

# 修改:由于使用str打印的速度比list要快,所以改为str

def display(dis_list):
    print(dis_list)

def enCoding(code_list):
    dis_list = ''
    lenCode = len(code_list[0])
    for i in range(3):
        for j in range(lenCode):
            if j % 2 == 0:
                if code_list[i][j] == '1':
                    dis_list += '|'
                else:
                    dis_list += ' '
            else:
                if code_list[i][j] == '1':
                    dis_list += '_'
                else:
                    dis_list += ' '
        dis_list += '\n'
    display(dis_list)

def Num2LCD(n):
    code_list = ['','','']
    for each_num in n:
        code_list[0] += (Num_dict[each_num][:3] + '0')
        code_list[1] += (Num_dict[each_num][3:6] + '0')
        code_list[2] += (Num_dict[each_num][6:] + '0')

    enCoding(code_list)


while 1:
    try:
        n = input('Input the numbers:')
        if n.isdigit():
            Num2LCD(n)
        else:
            print('What you entered is not a number, input a number again!')
    except (KeyboardInterrupt, EOFError):
        print('You close the program.')
        break
>>>
Input the numbers:1234567890
     _   _       _   _   _   _   _   _  
  |  _|  _| |_| |_  |_    | |_| |_| | |
  | |_   _|   |  _| |_|   | |_|  _| |_|

Input the numbers:qw2341
What you entered is not a number, input a number again!
Input the numbers:
You close the program.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-20 22:16:52 | 显示全部楼层
本帖最后由 776667 于 2016-11-20 22:33 编辑
def python_exercise_1(number):
    line = [[' _ ','   ',' _ ',' _ ','   ',' _ ',' _ ',' _ ',' _ ',' _ '],
            ['| |','  |',' _|',' _|','|_|','|_ ','|_ ','  |','|_|','|_|'],
            ['|_|','  |','|_ ',' _|','  |',' _|','|_|','  |','|_|',' _|']]
    output_line = [[],[],[]]
    for i in number:
        output_line[0].append(line[0][int(i)])
        output_line[1].append(line[1][int(i)])
        output_line[2].append(line[2][int(i)])
    print('%s\n%s\n%s\n'%('  '.join(output_line[0]),'  '.join(output_line[1]),'  '.join(output_line[2])))

if __name__ == '__main__':
    number = input('Input the number:')
    python_exercise_1(number)
    end = input('请按任意键继续...')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-16 21:01:24 | 显示全部楼层
好厉害!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-17 20:47:34 | 显示全部楼层
很不错啊,学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-21 21:30:17 | 显示全部楼层
SixPy 发表于 2016-11-15 10:48
数字转换成LCD显示模式

装逼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-21 22:07:59 | 显示全部楼层
厉害厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 08:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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