鱼C论坛

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

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

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

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

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

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

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

题目难度不会很大,新手完全可以一起参与。原则上前一天公布题目,后一天贴我的解法(未必是最佳答案,欢迎一起讨论)


  1. ''' Python小练习(001):
  2. 把数字(0~9)转换成LCD显示的模式。
  3. 例如:0:    1:     2:     3:     4:     5:     6:     7:     8:     9:
  4.          _              _      _             _      _      _      _      _
  5.         |  |     |      _|     _|    |_|    |_     |_       |    |_|    |_|
  6.         |_|      |     |_      _|      |     _|    |_|      |    |_|     _|

  7. 如果输入数字: 1234, 输出:                  _      _        
  8.                                    |      _|     _|    |_|
  9.                                    |     |_      _|      |
  10. '''
复制代码

无标题.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 编辑

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

  14. def number2lcd(n):
  15.     global lcd
  16.     output = ['','','']
  17.     l = len(str(n))
  18.     while True:
  19.         i = n // 10**(l-1)
  20.         for j in range(3):
  21.             output[j] += lcd[i][j]
  22.         n = n % 10**(l-1)
  23.         l -= 1
  24.         if l == 0:
  25.             break
  26.     return output

  27. n = int(raw_input('Input the numbers:'))
  28. output = number2lcd(n)
  29. for each in output:
  30.     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写出来。根据输入数字按位移取相应的笔画。
  1. font =""" _     _  _     _  _  _  _  _
  2. | |  | _| _||_||_ |_   ||_||_|
  3. |_|  ||_  _|  | _||_|  ||_| _|"""
  4. while True:
  5.     num = input('请输入数字:')
  6.     if num.isdigit():
  7.         break
  8.     else:
  9.         print('输入错误!', end = '')
  10. for line in range(3):
  11.     for n in num:
  12.         print(font[31 * line + int(n) * 3: 31 * line + int(n) * 3 + 3], end = '')
  13.     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 | 显示全部楼层
  1. dict1= {0:' - ',1:'   ',2:' - ',3:' - ',4:'   ',5:' - ',6:' - ',7:' - ',8:' - ',9:' - '}
  2. dict2= {0:'| |',1:'  |',2:'  |',3:'  |',4:'| |',5:'|  ',6:'|  ',7:'  |',8:'| |',9:'| |'}
  3. dict3= {0:'   ',1:'   ',2:' - ',3:' - ',4:' - ',5:' - ',6:' - ',7:'   ',8:' - ',9:' - '}
  4. dict4= {0:'| |',1:'  |',2:'|  ',3:'  |',4:'  |',5:'  |',6:'| |',7:'  |',8:'| |',9:'  |'}
  5. dict5= {0:' - ',1:'   ',2:' - ',3:' - ',4:'   ',5:' - ',6:' - ',7:'   ',8:' - ',9:' - '}
  6. while (1):
  7.     num=str(input('请输入整数:'))
  8.     list1=[]
  9.     list2=[]
  10.     list3=[]
  11.     list4=[]
  12.     list5=[]

  13.     for each in num:
  14.         eachnum=int(each)
  15.         list1.append(dict1[eachnum])
  16.         list2.append(dict2[eachnum])
  17.         list3.append(dict3[eachnum])
  18.         list4.append(dict4[eachnum])
  19.         list5.append(dict5[eachnum])
  20.     for each in list1:
  21.         print(each,end=' ')
  22.     print(' ')
  23.     for each in list2:
  24.         print(each,end=' ')
  25.     print(' ')
  26.     for each in list3:
  27.         print(each,end=' ')
  28.     print(' ')
  29.     for each in list4:
  30.         print(each,end=' ')
  31.     print(' ')
  32.     for each in list5:
  33.         print(each,end=' ')
  34.     print(' ')
  35.     input('请按回车键继续')


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

使用道具 举报

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

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

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

  4. while 1:
  5.     num = input('输入数字:')
  6.     if num.isdigit(): break
  7.        
  8. 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 编辑
  1. # Python 3.5 实现数字转换为LCD显示模式
  2. #
  3. ''' 根据LCD显示的特点,可将所有数字的显示划分为三层

  4.                   |_|
  5.                   |_|
  6.                   |_|

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

  13. def display(dis_list):
  14.     for each in dis_list:
  15.         print(each, sep = '', end = '')

  16. def enCoding(code_list):
  17.     dis_list = []
  18.     lenCode = len(code_list[0])
  19.     for i in range(3):
  20.         for j in range(lenCode):
  21.             if j % 2 == 0:
  22.                 if code_list[i][j] == '1':
  23.                     dis_list.append('|')
  24.                 else:
  25.                     dis_list.append(' ')
  26.             else:
  27.                 if code_list[i][j] == '1':
  28.                     dis_list.append('_')
  29.                 else:
  30.                     dis_list.append(' ')
  31.         dis_list.append('\n')
  32.     display(dis_list)

  33. def Num2LCD(n):
  34.     code_list = ['','','']
  35.     for each_num in n:
  36.         code_list[0] += (Num_dict[each_num][:3] + '0')
  37.         code_list[1] += (Num_dict[each_num][3:6] + '0')
  38.         code_list[2] += (Num_dict[each_num][6:] + '0')

  39.     enCoding(code_list)


  40. while 1:
  41.     try:
  42.         n = input('Input the numbers:')
  43.         if n.isdigit():
  44.             Num2LCD(n)
  45.         else:
  46.             print('What you entered is not a number, input a number again!')
  47.     except KeyboardInterrupt:
  48.         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 | 显示全部楼层
  1. # Python 3.5 实现数字转换为LCD显示模式
  2. #
  3. ''' 根据LCD显示的特点,可将所有数字的显示划分为三层

  4.                   |_|
  5.                   |_|
  6.                   |_|

  7.    实际上每层都是如下结构的循环
  8.    
  9.                   |_|
  10.                
  11. 则可根据横竖线的有无来进行数字的编码
  12. '''
  13. Num_dict = {
  14.     '0':'010101111',
  15.     '1':'000001001',
  16.     '2':'010011110',
  17.     '3':'010011011',
  18.     '4':'000111001',
  19.     '5':'010110011',
  20.     '6':'010110111',
  21.     '7':'010001001',
  22.     '8':'010111111',
  23.     '9':'010111011',
  24.     }

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

  26. def display(dis_list):
  27.     print(dis_list)

  28. def enCoding(code_list):
  29.     dis_list = ''
  30.     lenCode = len(code_list[0])
  31.     for i in range(3):
  32.         for j in range(lenCode):
  33.             if j % 2 == 0:
  34.                 if code_list[i][j] == '1':
  35.                     dis_list += '|'
  36.                 else:
  37.                     dis_list += ' '
  38.             else:
  39.                 if code_list[i][j] == '1':
  40.                     dis_list += '_'
  41.                 else:
  42.                     dis_list += ' '
  43.         dis_list += '\n'
  44.     display(dis_list)

  45. def Num2LCD(n):
  46.     code_list = ['','','']
  47.     for each_num in n:
  48.         code_list[0] += (Num_dict[each_num][:3] + '0')
  49.         code_list[1] += (Num_dict[each_num][3:6] + '0')
  50.         code_list[2] += (Num_dict[each_num][6:] + '0')

  51.     enCoding(code_list)


  52. while 1:
  53.     try:
  54.         n = input('Input the numbers:')
  55.         if n.isdigit():
  56.             Num2LCD(n)
  57.         else:
  58.             print('What you entered is not a number, input a number again!')
  59.     except (KeyboardInterrupt, EOFError):
  60.         print('You close the program.')
  61.         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 编辑
  1. def python_exercise_1(number):
  2.     line = [[' _ ','   ',' _ ',' _ ','   ',' _ ',' _ ',' _ ',' _ ',' _ '],
  3.             ['| |','  |',' _|',' _|','|_|','|_ ','|_ ','  |','|_|','|_|'],
  4.             ['|_|','  |','|_ ',' _|','  |',' _|','|_|','  |','|_|',' _|']]
  5.     output_line = [[],[],[]]
  6.     for i in number:
  7.         output_line[0].append(line[0][int(i)])
  8.         output_line[1].append(line[1][int(i)])
  9.         output_line[2].append(line[2][int(i)])
  10.     print('%s\n%s\n%s\n'%('  '.join(output_line[0]),'  '.join(output_line[1]),'  '.join(output_line[2])))

  11. if __name__ == '__main__':
  12.     number = input('Input the number:')
  13.     python_exercise_1(number)
  14.     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-3-29 17:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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