Python:每日一题 165
本帖最后由 冬雪雪冬 于 2018-3-18 20:16 编辑我们的玩法做了一下改变:
1. 楼主不再提供答案。
2. 请大家先独立思考”,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。
题目:
本题是 @Chase_Kas 提供的。原题是打印乘法口诀表。
考虑到题目过于简单,改成打印中文的吧。
要求使用循环语句或等同于循环的方法。
一一得一
一二得二 二二得四
一三得三 二三得六 三三得九
一四得四 二四得八 三四一十二四四一十六
一五得五 二五一十 三五一十五四五二十 五五二十五
一六得六 二六一十二三六一十八四六二十四五六三十 六六三十六
一七得七 二七一十四三七二十一四七二十八五七三十五六七四十二七七四十九
一八得八 二八一十六三八二十四四八三十二五八四十 六八四十八七八五十六八八六十四
一九得九 二九一十八三九二十七四九三十六五九四十五六九五十四七九六十三八九七十二九九八十一
感谢 @Chase_Kas 提供题目,也希望大家有适宜的题目提供给我们,共同把每日一题这个项目做好。请 @Chase_Kas 多回一帖,给予出题奖励。
要求:
题目难易适度,以python语言的运用为主,算法为辅。
对于提供优质题目的鱼油给予鱼币奖励。
可以发私信给我或直接发帖。 本帖最后由 天圆突破 于 2018-3-17 15:11 编辑
def nine():
dct = dict(zip(, ['','一', '二', '三', '四', '五', '六', '七', '八', '九']))
num = lambda s:'得'+dct if s < 10 else dct] + '十' + dct]
for i in range(1,10):
for j in range(1,i+1):
print('%s%s%s'%(dct, dct,num(i*j)),end = '\t'+(i==j)*'\n')
if __name__ == '__main__':
nine()
负优化一下{:9_240:}
dct = dict(zip(, ['', '一', '二', '三', '四', '五', '六', '七', '八', '九']))
num = lambda s: '得' + dct if s < 10 else dct + '十' + dct
for i in +dct+num(i*j) + '\t' + (i==j)*'\n' for i in range(1,10) for j in range(1,i+1)]:print(i, end = '') 本帖最后由 shigure_takimi 于 2018-3-16 21:41 编辑
##有些字体对齐可能会出问题,我用的“方正小标宋简体”,英文的Arial字体经验证对齐也没问题。
hanzi = '一二三四五六七八九'
shuzi = list(range(1,10))
dict1 = dict(zip(shuzi, hanzi))
for i in range(10, 82):
s = ''
shiwei = i//10
gewei = i%10
s += dict1+'十'
if gewei != 0:
s += dict1
dict1 = s
for i in range(1, 10):
for j in range(1, i+1):
a = dict1
b = dict1
c = dict1
d = ''
if i*j < 10:
d = a + b + '得' + c
else:
d = a + b + c
print(d, end = '\t')
print() table = {1:'一', 2:'二', 3:'三', 4:'四', 5:'五',
6:'六', 7:'七', 8:'八', 9:'九', 0:''}
def print_mutiple_table():
for row in range(1, 10):#行标
for col in range(1, row+1):#列标
result = row * col
if result < 10:
print(table + table +'得' + table, end=' ')
else:
a = result // 10 #十位数
b = result % 10 #个位数
print(table + table + table + '十' + table, end=' ')
print()
print_mutiple_table()
numstr = [' ','一','二','三','四','五','六','七','八','九']
for i in range(1, 10):
for j in range(1, 10):
if j <= i:
if i * j < 10:
result = numstr + numstr + '得' + numstr
print(result.ljust(7),end = '')
else:
result = numstr + numstr + numstr + '十'+ numstr\
if i*j%10 == 0:
print(result.ljust(7),end = '')
else:
print(result.ljust(6),end = '')
print('\n')
对齐比较麻烦,不知道有没有什么更好的方法
str1 = '一二三四五六七八九'
for i in range(9):
for j in range(i+1):
n = (i+1)*(j+1) #乘积
ten_num = n // 10 #乘积的十位数
single_num = n % 10 #乘积的个位数
#str2存储乘积转化成的中文字符串
if ten_num == 0:
str2 = str1
print(str1 + str1 + '得' + str2 ,end = '\t')
else:
if single_num == 0:
str2 = str1 + '十'
print(str1 + str1 + str2 ,end = '\t')
else:
str2 = str1 + '十' + str1
print(str1 + str1 + str2 ,end = '\t')
print('\n') 本帖最后由 steph0216 于 2018-3-17 23:28 编辑
dic = {0: ' ',1: '一', 2: '二', 3: '三', 4: '四', 5: '五', 6: '六', 7: '七', 8: '八', 9: '九'}
result = ''
for i in range(1, 10):
for j in range(1, i+1):
result += str(j)+str(i)+( (not i*j//10)*'得' )+( bool(i*j//10)*'十' ).join(str(i*j))+' '
result += '\n'
for i in range(10):
result = result.replace(str(i), dic)
print(result[:-2])
def num(n):
chinse = ['','一','二','三','四','五','六','七','八','九','十']
num_1 = 0 # 个位
num_2 = 0 # 十位
if n < 10:
return chinse
else:
num_1 = n // 10
num_2 = n % 10
return chinse +chinse
for i in range(1,9):
for j in range(1,i+1):
print("%s%s得%2s" %(num(j), num(i),num(i*j)), end='\t')
print('\t') 本帖最后由 Agoni 于 2018-3-16 23:26 编辑
Agoni 发表于 2018-3-16 22:51
chinse = ['','一','二','三','四','五','六','七','八','九']
if n < 10:
return chinse
else:
x = n // 10
y = n % 10
return chinse + '十' + chinse
for i in range(1,10):
for j in range(1,i+1):
print("%s%s得%2s" %(num(j), num(i),num(i*j)), end='\t')
print('\t') S='得一二三四五六七八九'
for i in range(1,10):
for j in range(1,i+1):
a=i*j
b=S+S+S
if a<10:
b+=S+''
else:
b=b+'十'+S
if a%10==0:
b=b[:-1]+''
print(b,end=' ')
print() cn = ['一','二','三','四','五','六','七','八','九']
def c():
for x in range(1,10):
for y in range(1,x+1):
B,A,Z = t(x,y)
print('{}{}{}\t'.format(B,A,Z),end='')
print()
def t(x,y):
A = cn
B = cn
z = x*y
Z = ''
if z>10:
Z = cn)-1]+'十'+cn)-1]
elif z == 10:
Z = cn)-1]+'十'
else:
Z = '得'+cn
return B,A,Z dict1 = {1:"一",2:"二",3:"三",4:"四",5:"五",6:"六",7:"七",8:"八",9:"九",0:"十"}
def re(i,j):
"""求结果的函数"""
book = int(j*i)
#格式转换
if book<10:
print(end=' ')
return dict1
elif book%10==0:
#求十位上的数字
shi = book//10
#求个位上的数字
ge = 0
print(end=' ')
#拼接结果
return dict1+dict1
else:
shi = book//10
ge = book%10
print(end=' ')
return dict1+"十"+dict1
for i in range(1,10):
for j in range(1,i+1):
#判断结果范围
if i*j<10:
print(str(dict1)+str(dict1)+"得"+re(i,j),end='')
else:
print(str(dict1)+str(dict1)+re(i,j),end='')
print("\n") for i in range(1,10):
st=''
for j in range(1,i+1):
#print(i,j)
zd={1:'一',2:'二',3:'三',4:'四',5:'五',6:'六',7:'七',8:'八',9:'九',10:'十'}
ss=''
ss+=zd+zd
if i*j>10 :
if i*j%10!=0 :
ss+=zd+zd+zd
else :
ss+=zd+zd
else :
ss=ss+'得'+zd
if len(ss)==4:
ss+=''
st+=ss+''
print(st) 本帖最后由 wyf345491656 于 2018-3-17 00:23 编辑
list1 = [' ','一','二','三','四','五','六','七','八','九','十']
for i in range(1,10):
for j in range(1,i+1):
if i*j < 10:
print('{}{}得{}\t'.format(list1,list1,list1),end='')
else:
print('{}{}{}{}{}\t'.format(list1,list1,list1,'十',list1),end='')
print() def intTostr(num):
str_list=['一','二','三','四','五','六','七','八','九','十']
shi=num//10
ge=num%10
if shi==0:
return str_list
elif ge==0:
return str_list+'十'
else:
return str_list+'十'+str_list
str_result=''
for i in range(1,10):
for j in range(1,i+1):
tmp=str.format("%s %s 得 %s" %(intTostr(j),intTostr(i),intTostr(i*j)))
if len(tmp)==7:
tmp=tmp+" "
elif len(tmp)==8:
tmp = tmp + " "
else:
tmp=tmp+""
str_result+=tmp
print(str_result)
str_result = '' def transform(number):
str1 = '一二三四五六七八九'
if number < 10:
return str1
elif number % 10 == 0:
return str1 + '十'
else:
return str1 + '十' + str1
def tables():
for i in range(1,10):
for j in range(1,i+1):
if i * j < 10:
print('%s%s得%s' % (transform(j),transform(i),transform(i*j)),end = '')
else:
print('%s%s%s'%(transform(j),transform(i),transform(i*j)),end = '')
print('')
if __name__ == '__main__':
tables()
结果:
一一得一
一二得二二二得四
一三得三二三得六三三得九
一四得四二四得八三四一十二四四一十六
一五得五二五一十三五一十五四五二十五五二十五
一六得六二六一十二三六一十八四六二十四五六三十六六三十六
一七得七二七一十四三七二十一四七二十八五七三十五六七四十二七七四十九
一八得八二八一十六三八二十四四八三十二五八四十六八四十八七八五十六八八六十四
一九得九二九一十八三九二十七四九三十六五九四十五六九五十四七九六十三八九七十二九九八十一
***Repl Closed***
num=['一','二','三','四','五','六','七','八','九','十']
for x in range(1,10):
for y in range(1,x+1):
multi= y*x
multi1= multi%10
multi2= multi//10
if multi<10:
print(num,num,'得',num,'\t',end='')
if multi==10:
print(num,num,num,num,'\t',end='')
if multi >10:
print(num,num,num,num[-1],num,'\t',end='')
if y==x:
print('\n')
打印如下:
一 一 得 一
一 二 得 二 二 二 得 四
一 三 得 三 二 三 得 六 三 三 得 九
一 四 得 四 二 四 得 八 三 四 一 十 二 四 四 一 十 六
一 五 得 五 二 五 一 十 三 五 一 十 五 四 五 二 十 十 五 五 二 十 五
一 六 得 六 二 六 一 十 二 三 六 一 十 八 四 六 二 十 四 五 六 三 十 十 六 六 三 十 六
一 七 得 七 二 七 一 十 四 三 七 二 十 一 四 七 二 十 八 五 七 三 十 五 六 七 四 十 二 七 七 四 十 九
一 八 得 八 二 八 一 十 六 三 八 二 十 四 四 八 三 十 二 五 八 四 十 十 六 八 四 十 八 七 八 五 十 六 八 八 六 十 四
一 九 得 九 二 九 一 十 八 三 九 二 十 七 四 九 三 十 六 五 九 四 十 五 六 九 五 十 四 七 九 六 十 三 八 九 七 十 二 九 九 八 十 一
def convert(n):
num=
cn=['一','二','三','四','五','六','七','八','九','']
dw=['','十','百','千','万']
n=str(int(n))
c=len(n)-1
ln=''
c1=0;
for i in n:
nb = int(i) - 1
if i=='0' and c1==0:
c1=1
pass
else:
if c1==1:
c1=0
ln=ln+ cn+dw
c=c-1
return(ln)
for i in range(1, 10):
for j in range(1, i+1):
print (convert(j),convert(i),convert(i*j),end=' ') if i*j>=10 else print (convert(j),convert(i),'得',convert(i*j),end=' ')
print() 本帖最后由 victor.xu 于 2018-3-17 13:14 编辑
写出汉字版的乘法表没几分钟,但是调试到对齐,花了好久。
dic = {0:' ', 1:'一', 2:'二', 3:'三', 4:'四', 5:'五', 6:'六', 7:'七', 8:'八',9:'九', 10:'十'}
for i in range(1, 10):
for j in range(1,i+1):
if i * j < 10:
st = '%s%s得%s' %(dic, dic, dic)
print('%-10s'%st, end = ' ')
else:
result = dic[(i * j) // 10] + dic + dic[(i * j) % 10]
st = '{}{}得{}'.format(dic, dic, result)
print('%-8s'%st, end = ' ')
print() 本帖最后由 elang696 于 2018-3-17 12:16 编辑
def int_to_cn(i,j):
num_dict = {1:'一',2:'二',3:'三',4:'四',5:'五',6:'六',7:'七',8:'八',9:'九',10:'十'}
result = j * i
tens = result // 10
units = result % 10
tens_cn = ''
units_cn = ''
if tens:
tens_cn = num_dict
if units:
units_cn = num_dict
if tens:
result_cn = num_dict + num_dict + tens_cn + '十' + units_cn
else:
result_cn = num_dict + num_dict + '得' + units_cn
return result_cn
if __name__ == '__main__':
for i in range(1,10):
for j in range(1,i+1):
result_cn = int_to_cn(i,j)
print(result_cn.center(8),end='') if len(result_cn)==4 else print(result_cn.center(7),end='')
print('')
一一得一
一二得二 二二得四
一三得三 二三得六 三三得九
一四得四 二四得八 三四一十二四四一十六
一五得五 二五一十 三五一十五 四五二十 五五二十五
一六得六 二六一十二三六一十八四六二十四 五六三十 六六三十六
一七得七 二七一十四三七二十一四七二十八五七三十五六七四十二七七四十九
一八得八 二八一十六三八二十四四八三十二 五八四十 六八四十八七八五十六八八六十四
一九得九 二九一十八三九二十七四九三十六五九四十五六九五十四七九六十三八九七十二九九八十一