冬雪雪冬 发表于 2018-3-16 20:44:23

Python:每日一题 165

本帖最后由 冬雪雪冬 于 2018-3-18 20:16 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考”,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
本题是 @Chase_Kas 提供的。原题是打印乘法口诀表。

考虑到题目过于简单,改成打印中文的吧。

要求使用循环语句或等同于循环的方法。
一一得一   
一二得二    二二得四   
一三得三    二三得六    三三得九   
一四得四    二四得八    三四一十二四四一十六
一五得五    二五一十    三五一十五四五二十    五五二十五
一六得六    二六一十二三六一十八四六二十四五六三十    六六三十六
一七得七    二七一十四三七二十一四七二十八五七三十五六七四十二七七四十九
一八得八    二八一十六三八二十四四八三十二五八四十    六八四十八七八五十六八八六十四
一九得九    二九一十八三九二十七四九三十六五九四十五六九五十四七九六十三八九七十二九九八十一

感谢 @Chase_Kas 提供题目,也希望大家有适宜的题目提供给我们,共同把每日一题这个项目做好。请 @Chase_Kas 多回一帖,给予出题奖励。
要求:
题目难易适度,以python语言的运用为主,算法为辅。
对于提供优质题目的鱼油给予鱼币奖励。
可以发私信给我或直接发帖。

天圆突破 发表于 2018-3-16 21:14:17

本帖最后由 天圆突破 于 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:39:12

本帖最后由 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()

pony马 发表于 2018-3-16 21:39:48

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()

o41003121 发表于 2018-3-16 21:59:32

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')

对齐比较麻烦,不知道有没有什么更好的方法

JessiFly 发表于 2018-3-16 22:02:04

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-16 22:16:37

本帖最后由 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])

Agoni 发表于 2018-3-16 22:51:07

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:02:03

本帖最后由 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')

塔利班 发表于 2018-3-16 23:05:03

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()

纳兰小寒 发表于 2018-3-16 23:21:37

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

inverseli 发表于 2018-3-16 23:28:41

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")

坑得飞起 发表于 2018-3-17 00:15:53

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:19:47

本帖最后由 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()

qwc3000 发表于 2018-3-17 09:02:07

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 = ''

溯影 发表于 2018-3-17 09:38:42

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***

scchapter 发表于 2018-3-17 09:59:22

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')
打印如下:
一 一 得 一        

一 二 得 二         二 二 得 四        

一 三 得 三         二 三 得 六         三 三 得 九        

一 四 得 四         二 四 得 八         三 四 一 十 二         四 四 一 十 六        

一 五 得 五         二 五 一 十         三 五 一 十 五         四 五 二 十 十         五 五 二 十 五        

一 六 得 六         二 六 一 十 二         三 六 一 十 八         四 六 二 十 四         五 六 三 十 十         六 六 三 十 六        

一 七 得 七         二 七 一 十 四         三 七 二 十 一         四 七 二 十 八         五 七 三 十 五         六 七 四 十 二         七 七 四 十 九        

一 八 得 八         二 八 一 十 六         三 八 二 十 四         四 八 三 十 二         五 八 四 十 十         六 八 四 十 八         七 八 五 十 六         八 八 六 十 四        

一 九 得 九         二 九 一 十 八         三 九 二 十 七         四 九 三 十 六         五 九 四 十 五         六 九 五 十 四         七 九 六 十 三         八 九 七 十 二         九 九 八 十 一        

ouyunfu 发表于 2018-3-17 10:09:14

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 11:10:14

本帖最后由 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:15:09

本帖最后由 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('')

一一得一
一二得二    二二得四
一三得三    二三得六    三三得九
一四得四    二四得八   三四一十二四四一十六
一五得五    二五一十   三五一十五   四五二十   五五二十五
一六得六   二六一十二三六一十八四六二十四   五六三十   六六三十六
一七得七   二七一十四三七二十一四七二十八五七三十五六七四十二七七四十九
一八得八   二八一十六三八二十四四八三十二   五八四十   六八四十八七八五十六八八六十四
一九得九   二九一十八三九二十七四九三十六五九四十五六九五十四七九六十三八九七十二九九八十一
页: [1] 2 3
查看完整版本: Python:每日一题 165