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-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 期待中,我也好好思考一下 还没看到答案 用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:02 编辑
冬雪雪冬 发表于 2016-11-14 09:55
用3行字符串把0~9写出来。根据输入数字按位移取相应的笔画。
版主大大的解法已经很不错了,晚点贴我的解法,思路应该差不多。
我是用的字典的方法 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('请按回车键继续')
更新完毕,见2楼解答 最新实现方法,欢迎指正
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('请按回车键继续')
fendoutaozi 发表于 2016-11-14 20:27
最新实现方法,欢迎指正
可以的,只要能实现的方法都是可以的。
开放性命题没有标准答案,目的是给大家多多练习编程的技巧。
用字典,列表,或者是字符串,都是可行的。 数字转换成LCD显示模式
f=(' _ __ _____ ',
'| || _| _||_||_ |_ ||_||_|',
'|_|||__|| _||_|||_| _|')
while 1:
num = input('输入数字:')
if num.isdigit(): break
print('\n'.join((''.join((ffor n in num))for row in range(3))))
SixPy 发表于 2016-11-15 10:48
数字转换成LCD显示模式
非常简洁!{:5_106:} SixPy 发表于 2016-11-15 10:48
数字转换成LCD显示模式
可以运行,但是新手的我表示看不懂—— 本帖最后由 梦想绘制者 于 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. # 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: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('请按任意键继续...') 好厉害!!! 很不错啊,学习了 SixPy 发表于 2016-11-15 10:48
数字转换成LCD显示模式
装逼{:10_250:} 厉害厉害