鱼C论坛

 找回密码
 立即注册
查看: 1010|回复: 29

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

[复制链接]
最佳答案
869 
发表于 2018-1-13 08:00:00 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

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

x
本帖最后由 冬雪雪冬 于 2018-2-1 21:36 编辑

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

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

题目:
用字符做一个简单的直方图(柱状图)。已知每月的数据如下:
[7, 3, 2, 9, 5, 1, 4, 0, 2, 8, 3, 9]
做出横坐标为月份的直方图。
  1. |                *                                       *
  2. |                *                             *         *
  3. | *              *                             *         *
  4. | *              *                             *         *
  5. | *              *    *                        *         *
  6. | *              *    *         *              *         *
  7. | *    *         *    *         *              *    *    *
  8. | *    *    *    *    *         *         *    *    *    *
  9. | *    *    *    *    *    *    *         *    *    *    *
  10. ------------------------------------------------------------
  11.   1月  2月  3月  4月  5月  6月  7月  8月  9月  10月 11月 12月
复制代码

本帖被以下淘专辑推荐:

最佳答案
20 
发表于 2018-1-13 09:38:49 | 显示全部楼层
本帖最后由 久疤K 于 2018-1-13 09:42 编辑

  1. '''
  2. 1. 找出最高数值
  3. 2. 以最高数值进行递减遍历, 打印边框, 每个月份判断是否打印 * 号
  4. '''

  5. import copy

  6. def fun(mlist):
  7.     m = max(mlist)
  8.     while m > 0:
  9.         print("| ", end="")
  10.         for x in range(12):
  11.             print("  *  " if mlist[x] >= m else "     ", end="")
  12.         print()
  13.         m -= 1
  14.     print("-"*64)
  15.     print("  ", end="")
  16.     for x in range(12):
  17.         print("%2d月 " %(x+1), end="")
  18.     print()

  19. def main():
  20.     mlist = [7, 3, 2, 9, 5, 1, 4, 0, 2, 8, 3, 9]
  21.     fun(mlist)

  22. if __name__ == "__main__":
  23.     main()
复制代码

结果:
QQ截图20180113094231.png

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
13 
发表于 2018-1-13 09:52:34 | 显示全部楼层
本帖最后由 shigure_takimi 于 2018-1-13 10:15 编辑
  1. a = [7, 3, 2, 9, 5, 1, 4, 0, 2, 8, 3, 9]
  2. def getZ(a):
  3.         maxValue = max(a)
  4.         b = ['|'*maxValue]
  5.         for i in a:
  6.                 b.append(' '*(maxValue-i)+'*'*i)
  7.         for i in range(maxValue):
  8.                 for j in b:
  9.                         print(j[i], end = '\t')
  10.                 print()
  11.         print('-'*100)
  12.         for i in range(1,13):
  13.                 print('\t'+str(i)+'月', end = '')
  14. getZ(a)
复制代码
1.png

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
0 
发表于 2018-1-13 11:07:29 | 显示全部楼层
  1. list1 = [7, 3, 2, 9, 5, 1, 4, 0, 2, 8, 3, 9]
  2. list2 = list1[:]
  3. number = []
  4. layer = 9
  5. while layer > 0:
  6.         print('|',end=' ')
  7.         for j in list1:
  8.                 if j == layer:
  9.                         number.append(list2.index(j))
  10.                         list2[list2.index(j)] = '*'
  11.         lenth = len(number)
  12.         number.sort()
  13.         for i in range(0,lenth):
  14.                 if i < lenth-1 :
  15.                         if i == 0:
  16.                                 print(' '*4*(number[i]) + '*',end='')
  17.                         else:
  18.                                 print(' '*4*(number[i]-number[i-1]-1)+' '*3 + '*',end='')
  19.                 else:
  20.                         print(' '*4*(number[i]-number[i-1]-1)+ ' '*3 + '*')
  21.         layer -= 1
  22. print('-'*12*4)
  23. for i in range(1,13):
  24.         i = str(i)
  25.         print(' '+ i + '月',end='')
复制代码

结果

结果

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
3 
发表于 2018-1-13 16:40:47 | 显示全部楼层
本帖最后由 nononoyes 于 2018-1-13 16:43 编辑

listArray = [7, 3, 2, 9, 5, 1, 4, 0, 2, 8, 3, 9]
max = max(listArray)

for i in range(1,max+2):
    for j in range(len(listArray)):
        if (max<=0):
            print('\t%d月 '%(j+1),end ='')
        else:
            if(listArray[j]-max>=0):
                print('\t*',end ='')
            else:
                print('\t ',end ='')
            if(j==len(listArray)-1):
                print('\n')
    max = max -1

9.png

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
5 
发表于 2018-1-13 20:53:53 | 显示全部楼层
从下往上添加字符串,然后再倒过来打印
不属于统计部分的内容直接从题目复制过来了
  1. def fun(lst):
  2.     result = ["  1月  2月  3月  4月  5月  6月  7月  8月  9月  10月 11月 12月",
  3.               "------------------------------------------------------------"]
  4.     for i in range(max(lst)):
  5.         stats = "".join((((j-i)*"*" or " ") + "    ")[-5:] for j in lst)
  6.         result.append("| " + stats)
  7.     return "\n".join(result[::-1])
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
3 
发表于 2018-1-13 21:35:15 | 显示全部楼层
  1. #每月数据
  2. data = [7, 3, 2, 9, 5, 1, 4, 0, 2, 8, 3, 9]
  3. #找到最大值
  4. XMax = max(data)
  5. for i in range(0,XMax):
  6.         print('|',end='')
  7.         for item in data:
  8.                 if XMax - i - item > 0:
  9.                         print(' ',end='  ')
  10.                 else:
  11.                         print('*',end='  ')
  12.         print('')
  13. print('------------------------------------')
  14. print(' 1  2  3  4  5  6  7  8  9  10 11 12')
复制代码


稍加思考就可得出规律。
时间复杂度:O(n2)

看完今天的汇编视频,路过,现在的汇编板块人好少。

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
42 
发表于 2018-1-14 00:58:54 | 显示全部楼层
  1. L = [7, 3, 2, 9, 5, 1, 4, 0, 2, 8, 3, 9]
  2. Max = 9
  3. while Max > 0:
  4.     print('| '+'    '.join(['*' if x >= Max else ' ' for x in L]))
  5.     Max -= 1
  6. print('-' * 60)
  7. print('  '+' '.join(['%02d月'% x for x in range(1,13)]))
复制代码


捕获.PNG

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
1 
发表于 2018-1-14 21:44:52 | 显示全部楼层
  1. def show_histogram(ls):
  2.     max_len = max(ls)
  3.     histogram = [('*' * each).rjust(max_len) for each in ls]
  4.     for i in range(max_len):
  5.         print('|', end=' ')
  6.         for j in range(len(ls)):
  7.             print(histogram[j][i].center(7), end='')

  8.         print()
  9.     print('_' * (12 * 7 + 1))
  10.     print('|', end=' ')
  11.     months = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
  12.     for each in months:
  13.         print(each.center(6), end='')
  14. ls = [7, 3, 2, 9, 5, 1, 4, 0, 2, 8, 3, 9]
  15. show_histogram(ls)
复制代码

结果
|                         *                                                       *   
|                         *                                         *             *   
|    *                    *                                         *             *   
|    *                    *                                         *             *   
|    *                    *      *                                  *             *   
|    *                    *      *             *                    *             *   
|    *      *             *      *             *                    *      *      *   
|    *      *      *      *      *             *             *      *      *      *   
|    *      *      *      *      *      *      *             *      *      *      *   
_____________________________________________________________________________________
|   1月    2月    3月    4月    5月    6月    7月    8月    9月   10月   11月   12月

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
0 
发表于 2018-1-14 23:20:45 | 显示全部楼层
  1. datalist = [7, 3, 2, 9, 5, 1, 4, 0, 2, 8, 3, 9]
  2. i = max(datalist)
  3. list1 = [[],[],[],[],[],[],[],[],[],[],[],[]]
  4. list2 = [[],[],[],[],[],[],[],[],[],[],[],[]]
  5. for j in range(0,12):
  6.         list1[j] = (i-datalist[j])*" " + datalist[j] * "*"
  7. for k in range(0,12):
  8.         for each in list1[k]:
  9.                 list2[k].append(each)
  10. for k in range(0,i):
  11.         print("|",end=" ")
  12.         for j in range(0,12):
  13.                 print(list2[j][k],end= "    ")
  14.         print("\n")
  15. print("------------------------------------------------------------")
  16. print(" 1月  2月  3月  4月  5月  6月  7月  8月  9月  10月 11月 12月")
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
2 
发表于 2018-1-15 13:26:50 | 显示全部楼层
我是菜鸟,请多多指教~

list1 = [7, 3, 2, 9, 5, 1, 4, 0, 2, 8, 3, 9]
l1 = []
l1.append(["|" for j in range(9)])                    # 第一列为9个"|"
for i in list1:
    l1.append([" " if (9-j) > i else "*" for j in range(9)])

for c in range(len(l1[0])):
    tmp = []
    for r in range(len(l1)):
        tmp.append(l1[r][c])
    print('     '.join(tmp))
print("____________________________________________________________________________")
print("     1月   2月   3月   4月   5月   6月   7月   8月   9月   10月   11月   12月")

结果:
练习.png

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
0 
发表于 2018-1-15 19:04:46 | 显示全部楼层
  1. list1=[7, 3, 2, 9, 5, 1, 4, 0, 2, 8, 3, 9]
  2. list2=["1月",  "2月",  "3月",  "4月",  "5月",  "6月",  "7月",  "8月",  "9月",
  3.        "10月", "11月", "12月",]
  4. m= max(list1)

  5. for i in range (11):
  6.     if i <9:
  7.         print("|",end="")
  8.         for j in list1:
  9.             if j >= m:
  10.                  print("*"+" "*2,end=" ")
  11.             else:
  12.                 print(" "+" "*2,end=" ")
  13.         m=m-1
  14.     if i==9:
  15.         print("-"*48)
  16.     if i ==10:
  17.         for t in range(12):
  18.             print(" "+list2[t],end="")
  19.     print("\n")   
  20.    
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
0 
发表于 2018-1-15 19:30:58 | 显示全部楼层
怎么看答案
最佳答案
12 
发表于 2018-1-15 20:18:48 | 显示全部楼层
本帖最后由 大头目 于 2018-1-15 20:21 编辑

lista=[7, 3, 2, 9, 5, 1, 4, 0, 2, 8, 3, 9]

n = 0
while n < 9:
        x = []
        for i in range(0,12):
                if lista != max(lista):
                        x.append(' ')
                else:
                        x.append('*')
                        lista -=1
        print('|  '+'    '.join(x))
        n += 1
print('------------------------------------------------------------')
print(' 1月  2月  3月  4月  5月  6月  7月  8月  9月  10月  11月  12月')

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
8 
发表于 2018-1-15 21:49:03 | 显示全部楼层
A = [7, 3, 2, 9, 5, 1, 4, 0, 2, 8, 3, 9]
B=['','','','','','','','','','','','','']
M=9
for Month in range(M):
    for i in range(len(A)):
        B[0] = '|'
        if A[i]-M>=0:
            B[i+1]='*'
        else:
            B[i+1] = ' '

    print(B[0],'    ', B[1],'    ', B[2],'    ', B[3],'    ', B[4],'    ', B[5],'    ', B[6],'    ', B[7],'    ', B[8],'    ', B[9],'    ', B[10],'    ',B[11],'    ', B[12])

    M-=1
print('_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _')
print('    ','1月   ','2月   ',  '3月   ',  '4月   ',  '5月   ',  '6月   ',  '7月   ',  '8月   ',  '9月   ',  '10月   ', '11月   ', '12月')

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
2 
发表于 2018-1-15 23:24:52 | 显示全部楼层
https://www.jianshu.com/p/910c72caca5d

链接贴到这里来
最佳答案
3 
发表于 2018-1-16 09:29:50 | 显示全部楼层
我想知道答案
最佳答案
0 
发表于 2018-1-16 10:40:14 | 显示全部楼层
  1. date=[7,3,2,9,5,1,4,0,2,8,3,9]
  2. i=9
  3. for n in range(9):
  4.     print('|',end="")
  5.     for x in range(12):
  6.         #print(date[x],end=" ")
  7.         if date[x]>=i:
  8.             print('*',end="   ")
  9.         else:
  10.             print(' ',end="   ")
  11.     print("\n")
  12.     i-=1
  13. for x in range(47):
  14.     print('-',end='')
  15. print()
  16. for x in range(12):
  17.     print(str(x+1)+"月",end=" ")
复制代码

我是新手,请问如何能学习到其他人的解答方式呢,这样就可以学习更多的思路了

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
1 
发表于 2018-1-16 12:35:11 | 显示全部楼层
  1. list1 = [7, 3, 2, 9, 5, 1, 4, 0, 2, 8, 3, 9]

  2. for cow in range(1,10):
  3.     print("| ",end="")
  4.     for each in list1:
  5.         if each >= 10-cow:
  6.             print("*\t",end="")
  7.         else:
  8.             print("\t",end="")
  9.     print("\n")
  10.    
  11. print("-"*90)
  12. for i in range(1,13):
  13.     print("%d月\t"%i, end="")
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
0 
发表于 2018-1-19 12:52:11 | 显示全部楼层
  1. list_1=[7, 3, 2, 9, 5, 1, 4, 0, 2, 8, 3, 9]
  2. a=max(list_1)
  3. while a>0:
  4.     list_2=[a-x for x in list_1]
  5.     for num in list_2:
  6.             if num==0 or num<0:
  7.                 print("*",end='  ')
  8.             else:
  9.                 print(" ",end='  ')
  10.     print('\n')
  11.     a=a-1
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号 )

GMT+8, 2018-7-22 01:47

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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