鱼C论坛

 找回密码
 立即注册
查看: 14054|回复: 67

[技术交流] Python:每日一题 165

[复制链接]
发表于 2018-3-16 20:44:23 | 显示全部楼层 |阅读模式

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

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

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

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

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

题目:
本题是 @Chase_Kas 提供的。原题是打印乘法口诀表。
1.jpg
考虑到题目过于简单,改成打印中文的吧。
2.jpg
要求使用循环语句或等同于循环的方法。
  1. 一一得一   
  2. 一二得二    二二得四   
  3. 一三得三    二三得六    三三得九   
  4. 一四得四    二四得八    三四一十二  四四一十六  
  5. 一五得五    二五一十    三五一十五  四五二十    五五二十五  
  6. 一六得六    二六一十二  三六一十八  四六二十四  五六三十    六六三十六  
  7. 一七得七    二七一十四  三七二十一  四七二十八  五七三十五  六七四十二  七七四十九  
  8. 一八得八    二八一十六  三八二十四  四八三十二  五八四十    六八四十八  七八五十六  八八六十四  
  9. 一九得九    二九一十八  三九二十七  四九三十六  五九四十五  六九五十四  七九六十三  八九七十二  九九八十一
复制代码


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

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-9-7 17:17:14 | 显示全部楼层
  1. w = ' 一二三四五六七八九'
  2. for i in range(1, 10):
  3.     for j in range(1, i + 1):
  4.         p = i * j
  5.         if p < 10:
  6.             print('{1}{0}得{2}'.format(w[i], w[j], w[i*j]),end='\t')
  7.         else:
  8.             d, v = divmod(i*j, 10)
  9.             print('{1}{0}{2}十{3}'.format(w[i], w[j], w[d],w[v]),end='\t')
  10.     print(end='\n')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-25 19:10:32 | 显示全部楼层
  1. def countFormChinese():
  2.         countDict = {
  3.                 0: '', 1: '一', 2: '二', 3: '三', 4: '四',
  4.                 5: '五', 6: '六', 7: '七', 8: '八', 9: '九'
  5.         }
  6.         for i in range(1, 10):
  7.                 for j in range(1, i + 1):
  8.                         if i * j < 10:
  9.                                 print('%s%s得%s' % (countDict[j], countDict[i], countDict[i * j]), end='  ')
  10.                         else:
  11.                                 print('%s%s%s十%s' % (countDict[j], countDict[i], countDict[int(str(i * j)[0])],
  12.                                                      countDict[int(str(i * j)[1])]), end='  ')
  13.                 print()

  14. countFormChinese()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-11 23:43:30 | 显示全部楼层
def fun():
    for i in range(1, 10):
        for j in range(1, i+1):
            print("%s×%s=%s"%(j, i, i*j), end = " ")
        print()            
    pass
def fun():
    dict_num = {0:"",1:"一", 2:"二",3:"三",4:"四",5:"五",6:"六",7:"七",8:"八",9:"九",10:"十"}
    for i in range(1, 10):
        for j in range(1, i+1):
            k = i*j
            if k < 10:
                print("%s%s得%s"%(dict_num[j], dict_num[i], dict_num[k]), end = " ")
            else:
                a = k//10
                b = 10
                c = k%10
                print("%s%s%s%s%s"%(dict_num[j], dict_num[i], dict_num[a],dict_num[b],dict_num[c]), end = " ")
        print()
    pass
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-11 11:07:24 | 显示全部楼层
dict1 = dict(zip(range(10),['', '一', '二', '三', '四', '五', '六',
                              '七', '八', '九']))

def switch(s):
    if len(s) == 3:
        return dict1[int(s[0])]+dict1[int(s[1])]+'得'+dict1[int(s[2])]
    else:
        return dict1[int(s[0])]+dict1[int(s[1])]+dict1[int(s[2])]+'十'+dict1[int(s[3])]


for i in range(1, 10):
    for j in range(1, i+1):
        s = '%d%d%d' % (j, i, j*i)
        print('%5s' % switch(s), end='  ')
    print()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-21 19:52:18 | 显示全部楼层
  1. # encoding: utf-8
  2. """
  3. 乘法口诀中文版:一一得一
  4. """
  5. a = []
  6. a.extend("一二三四五六七八九零")
  7. for i in range(1, 10):
  8.     for j in range(1, i+1):
  9.         k = (i * j)//10
  10.         m = (i * j) % 10
  11.         if k == 0:
  12.             print(a[j - 1] + a[i - 1] + "得" + a[m - 1], end="")
  13.         elif m == 0:
  14.             print(a[j - 1] + a[i - 1] + a[k - 1]+"十", end="")
  15.         else:
  16.             print(a[j - 1] + a[i - 1] + a[k - 1] + "十" + a[m - 1], end="")
  17.         print("\t", end="")
  18.     print("")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-21 19:46:49 | 显示全部楼层
# encoding: utf-8
"""
乘法口诀中文版:一一得一
"""
a = []
a.extend("一二三四五六七八九零")
for i in range(1, 10):
    for j in range(1, i+1):
        k = (i * j)//10
        m = (i * j) % 10
        if k == 0:
            print(a[j - 1] + a[i - 1] + "得" + a[m - 1], end="")
        elif m == 0:
            print(a[j - 1] + a[i - 1] + a[k - 1]+"十", end="")
        else:
            print(a[j - 1] + a[i - 1] + a[k - 1] + "十" + a[m - 1], end="")
        print("\t", end="")
    print("")
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 23:50:44 | 显示全部楼层
dict1 = {}

list1 = ['','一','二','三','四','五','六','七','八','九']

for j in range(10,82):
    str1 = str(j)
    list1.append(list1[int(str1[0])]+'十'+list1[int(str1[1])])

for i in range(82):
    dict1[i] = list1[i]

i = 1
j = 1
for i in range(1,10):
    for j in range(1,i+1):
        if i*j<10:
            print("%s%s得%s"%(dict1[j],dict1[i],dict1[i*j]),end='  ')
        else:
            print("%s%s%s"%(dict1[j],dict1[i],dict1[i*j]),end='  ')
    print('')
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 21:43:33 | 显示全部楼层
本帖最后由 Lis 于 2018-3-19 21:46 编辑


@冬雪雪冬 那啥。。不管好坏好歹点评下吧。32楼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 20:58:06 | 显示全部楼层
  1. li = ["","一","二","三","四","五","六","七","八","九"]
  2. for num in range(1,10):
  3.     i = 1
  4.     while(i<=num):
  5.         k = str(i * num)
  6.         if len(k)>1:
  7.             if i < num:
  8.                 print("%s%s%s  " %(li[i],li[num],li[int(k[0])] + "十" + li[int(k[1])]),end ="")
  9.             else:
  10.                 print("%s%s%s  " %(li[i],li[num],li[int(k[0])] + "十" + li[int(k[1])]))
  11.         else:
  12.             if i < num:
  13.                 print("%s%s得%s  " %(li[i],li[num],li[int(k[0])]),end ="")
  14.             else:
  15.                 print("%s%s得%s  " %(li[i],li[num],li[int(k[0])]))
  16.         i +=1
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 18:56:49 | 显示全部楼层
luokaoge 发表于 2018-3-19 18:55
for i in range(1,10):
    x=i
    s = []

捕获.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 18:55:28 | 显示全部楼层
luokaoge 发表于 2018-3-19 18:49
会报错么,我运行可以呀,就是都有得。。。

for i in range(1,10):
    x=i
    s = []
    c = ''
    d = ['十','一','二','三','四','五','六','七','八','九']
    for i in range(1,x+1):
            y=str(i*x)
            a = d[i]
            b = d[x]
            e = d[int(y[0])]
            f = ''
            if len(y)==2:
                if int(y[1])==0:
                     f = d[0] + '  '
                else:
                     f = d[0] + d[int(y[1])]
                c = a + b  + e + f
            else:
                f = '  '
                if i == 1:
                    c =a + b + '得' + e
                else:  
                    c =a + b + '得' + e + f
            s.append(c)
    print(" ".join(s))
打印结果:
====================== RESTART: F:\klay_python\乘法口诀.py ======================
一一得一
一二得二 二二得四  
一三得三 二三得六   三三得九  
一四得四 二四得八   三四一十二 四四一十六
一五得五 二五一十   三五一十五 四五二十   五五二十五
一六得六 二六一十二 三六一十八 四六二十四 五六三十   六六三十六
一七得七 二七一十四 三七二十一 四七二十八 五七三十五 六七四十二 七七四十九
一八得八 二八一十六 三八二十四 四八三十二 五八四十   六八四十八 七八五十六 八八六十四
一九得九 二九一十八 三九二十七 四九三十六 五九四十五 六九五十四 七九六十三 八九七十二 九九八十一
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 18:49:24 | 显示全部楼层
luokaoge 发表于 2018-3-17 21:14
这样还是格式好看些
for i in range(1,10):
    x=i

会报错么,我运行可以呀,就是都有得。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 11:53:26 | 显示全部楼层
本帖最后由 graceasyi 于 2018-3-19 13:06 编辑

来晚了~

  1. def ch(d):
  2.     cc = ['十', '一', '二', '三', '四', '五', '六', '七', '八', '九']
  3.     if len(str(d)) == 1:
  4.         return cc[d]
  5.     elif len(str(d)) == 2:
  6.         return cc[d//10] + '十' + cc[d%10] if d%10 else cc[d//10] + cc[d%10]


  7. for i in range(1, 10):
  8.     for j in range(1, i+1):
  9.         if len(str(i*j)) == 1:
  10.             print('%s%s得%s' % (ch(j), ch(i), ch(i*j)), end='\t')
  11.         else:
  12.             print('%s%s%s' % (ch(j), ch(i), ch(i*j)), end='\t')
  13.     print("\n")
复制代码


结果:
乘法表.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 11:46:17 | 显示全部楼层
本帖最后由 CH10 于 2018-3-19 12:05 编辑
  1. num = (' ', '一', '二', '三', '四', '五', '六', '七', '八', '九')
  2. def strResult(n,num = ()):
  3.     result = [num[int(x)] for x in str(n)] ##利用列表生成器
  4.     temp = ''
  5.     if(len(result)<2):
  6.         temp = '得'
  7.     for i in range(len(result)):
  8.         if(i>0):
  9.             temp=temp+'十'
  10.         temp+=result[i]
  11.         if(len(result) < 2):
  12.             temp += ' '
  13.     return temp
  14. for x in range(1, 10):
  15.     for y in range(1, x+1):
  16.         print('%s%s%s'%(num[y], num[x], strResult(x*y, num)),end = '\t'+(x==y)*'\n')
复制代码
  1. 一一得一        
  2. 一二得二         二二得四        
  3. 一三得三         二三得六         三三得九        
  4. 一四得四         二四得八         三四一十二        四四一十六       
  5. 一五得五         二五一十         三五一十五        四五二十         五五二十五       
  6. 一六得六         二六一十二        三六一十八        四六二十四        五六三十         六六三十六       
  7. 一七得七         二七一十四        三七二十一        四七二十八        五七三十五        六七四十二        七七四十九       
  8. 一八得八         二八一十六        三八二十四        四八三十二        五八四十         六八四十八        七八五十六        八八六十四       
  9. 一九得九         二九一十八        三九二十七        四九三十六        五九四十五        六九五十四        七九六十三        八九七十二        九九八十一
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 10:04:32 From FishC Mobile | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-3-17 13:06
中文 对不齐,很怪。

中文字符的宽度是英文字符两倍,所以对齐很难,如果用全角的空格(和中文一样占两个宽度)就很容易对齐了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 09:36:03 | 显示全部楼层
本帖最后由 luokaoge 于 2018-3-19 09:37 编辑

~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-3-19 09:20:08 | 显示全部楼层
def transform(number):
        str1 = '零一二三四五六七八九十'
        if number < 10:
                return str1[number]
        elif number % 10 == 0:
                return str1[number//10] + str1[10]
        else:
                return str1[number//10] + str1[10] + str1[number%10]

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 = '\t')
                        else:
                                print('%s%s%s'%(transform(j),transform(i),transform(i*j)),end = '\t')
                print('')

if __name__ == '__main__':
        tables()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-18 23:23:41 | 显示全部楼层
  1. def trans(a):
  2.     tmp = ''
  3.     tuple1 = ('十','一','二','三','四','五','六','七','八','九')
  4.     for i in a:
  5.         tmp += tuple1[int(i)]
  6.     return tmp
  7. for i in range(9):
  8.     for j in range(i+1):
  9.         tmp = str((i+1)*(j+1))
  10.         if len(tmp) == 2 and tmp[1] != '0':
  11.             tmp = tmp[0]+'0'+tmp[1]
  12.         print(trans(str(j+1))+trans(str(i+1))+'得'+trans(tmp)+ '\t',end='')
  13.     print('')
  14.    
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-18 21:18:02 | 显示全部楼层
大家都写的很简洁呀,向你们学习。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-23 13:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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