jerryxjr1220 发表于 2016-11-13 23:00:03

python小练习(001):把数字转换成LCD显示模式

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

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

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


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

如果输入数字: 1234, 输出:                _      _      
                                 |      _|   _|    |_|
                                 |   |_      _|      |
'''

jerryxjr1220 发表于 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:
#                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 += lcd
      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

jackie-L 发表于 2016-11-14 00:31:52

期待中,我也好好思考一下

wago2008 发表于 2016-11-14 09:40:30

还没看到答案

冬雪雪冬 发表于 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, end = '')
    print()

jerryxjr1220 发表于 2016-11-14 14:00:58

本帖最后由 jerryxjr1220 于 2016-11-14 14:02 编辑

冬雪雪冬 发表于 2016-11-14 09:55
用3行字符串把0~9写出来。根据输入数字按位移取相应的笔画。

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


我是用的字典的方法

fendoutaozi 发表于 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)
      list2.append(dict2)
      list3.append(dict3)
      list4.append(dict4)
      list5.append(dict5)
    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('请按回车键继续')


jerryxjr1220 发表于 2016-11-14 20:20:57

更新完毕,见2楼解答

fendoutaozi 发表于 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('请按回车键继续')

jerryxjr1220 发表于 2016-11-14 22:09:33

fendoutaozi 发表于 2016-11-14 20:27
最新实现方法,欢迎指正

可以的,只要能实现的方法都是可以的。
开放性命题没有标准答案,目的是给大家多多练习编程的技巧。
用字典,列表,或者是字符串,都是可行的。

SixPy 发表于 2016-11-15 10:48:42

数字转换成LCD显示模式
f=(' _   __   _____ ',
   '| || _| _||_||_ |_   ||_||_|',
   '|_|||__|| _||_|||_| _|')

while 1:
    num = input('输入数字:')
    if num.isdigit(): break
       
print('\n'.join((''.join((ffor n in num))for row in range(3))))

jerryxjr1220 发表于 2016-11-15 11:47:05

SixPy 发表于 2016-11-15 10:48
数字转换成LCD显示模式

非常简洁!{:5_106:}

98付涛 发表于 2016-11-16 18:02:28

SixPy 发表于 2016-11-15 10:48
数字转换成LCD显示模式

可以运行,但是新手的我表示看不懂——

梦想绘制者 发表于 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)
    for i in range(3):
      for j in range(lenCode):
            if j % 2 == 0:
                if code_list == '1':
                  dis_list.append('|')
                else:
                  dis_list.append(' ')
            else:
                if code_list == '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 += (Num_dict[:3] + '0')
      code_list += (Num_dict + '0')
      code_list += (Num_dict + '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.

梦想绘制者 发表于 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)
    for i in range(3):
      for j in range(lenCode):
            if j % 2 == 0:
                if code_list == '1':
                  dis_list += '|'
                else:
                  dis_list += ' '
            else:
                if code_list == '1':
                  dis_list += '_'
                else:
                  dis_list += ' '
      dis_list += '\n'
    display(dis_list)

def Num2LCD(n):
    code_list = ['','','']
    for each_num in n:
      code_list += (Num_dict[:3] + '0')
      code_list += (Num_dict + '0')
      code_list += (Num_dict + '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.

776667 发表于 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.append(line)
      output_line.append(line)
      output_line.append(line)
    print('%s\n%s\n%s\n'%(''.join(output_line),''.join(output_line),''.join(output_line)))

if __name__ == '__main__':
    number = input('Input the number:')
    python_exercise_1(number)
    end = input('请按任意键继续...')

hellobug 发表于 2016-12-16 21:01:24

好厉害!!!

忘忧草Allen 发表于 2016-12-17 20:47:34

很不错啊,学习了

lb971216008 发表于 2016-12-21 21:30:17

SixPy 发表于 2016-11-15 10:48
数字转换成LCD显示模式

装逼{:10_250:}

zhanghe 发表于 2016-12-21 22:07:59

厉害厉害
页: [1] 2 3
查看完整版本: python小练习(001):把数字转换成LCD显示模式