冬雪雪冬 发表于 2018-1-13 08:00:00

Python:每日一题 140

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

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

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

题目:
用字符做一个简单的直方图(柱状图)。已知每月的数据如下:

做出横坐标为月份的直方图。
|                *                                       *
|                *                           *         *
| *            *                           *         *
| *            *                           *         *
| *            *    *                        *         *
| *            *    *         *            *         *
| *    *         *    *         *            *    *    *
| *    *    *    *    *         *         *    *    *    *
| *    *    *    *    *    *    *         *    *    *    *
------------------------------------------------------------
1月2月3月4月5月6月7月8月9月10月 11月 12月

久疤K 发表于 2018-1-13 09:38:49

本帖最后由 久疤K 于 2018-1-13 09:42 编辑


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

import copy

def fun(mlist):
    m = max(mlist)
    while m > 0:
      print("| ", end="")
      for x in range(12):
            print("*" if mlist >= m else "   ", end="")
      print()
      m -= 1
    print("-"*64)
    print("", end="")
    for x in range(12):
      print("%2d月 " %(x+1), end="")
    print()

def main():
    mlist =
    fun(mlist)

if __name__ == "__main__":
    main()

结果:

shigure_takimi 发表于 2018-1-13 09:52:34

本帖最后由 shigure_takimi 于 2018-1-13 10:15 编辑

a =
def getZ(a):
        maxValue = max(a)
        b = ['|'*maxValue]
        for i in a:
                b.append(' '*(maxValue-i)+'*'*i)
        for i in range(maxValue):
                for j in b:
                        print(j, end = '\t')
                print()
        print('-'*100)
        for i in range(1,13):
                print('\t'+str(i)+'月', end = '')
getZ(a)

haixiaotian 发表于 2018-1-13 11:07:29

list1 =
list2 = list1[:]
number = []
layer = 9
while layer > 0:
        print('|',end=' ')
        for j in list1:
                if j == layer:
                        number.append(list2.index(j))
                        list2 = '*'
        lenth = len(number)
        number.sort()
        for i in range(0,lenth):
                if i < lenth-1 :
                        if i == 0:
                                print(' '*4*(number) + '*',end='')
                        else:
                                print(' '*4*(number-number-1)+' '*3 + '*',end='')
                else:
                        print(' '*4*(number-number-1)+ ' '*3 + '*')
        layer -= 1
print('-'*12*4)
for i in range(1,13):
        i = str(i)
        print(' '+ i + '月',end='')

nononoyes 发表于 2018-1-13 16:40:47

本帖最后由 nononoyes 于 2018-1-13 16:43 编辑

listArray =
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-max>=0):
                print('\t*',end ='')
            else:
                print('\t ',end ='')
            if(j==len(listArray)-1):
                print('\n')
    max = max -1

solomonxian 发表于 2018-1-13 20:53:53

从下往上添加字符串,然后再倒过来打印
不属于统计部分的内容直接从题目复制过来了{:10_333:}
def fun(lst):
    result = ["1月2月3月4月5月6月7月8月9月10月 11月 12月",
            "------------------------------------------------------------"]
    for i in range(max(lst)):
      stats = "".join((((j-i)*"*" or " ") + "    ")[-5:] for j in lst)
      result.append("| " + stats)
    return "\n".join(result[::-1])

cnkizy 发表于 2018-1-13 21:35:15

#每月数据
data =
#找到最大值
XMax = max(data)
for i in range(0,XMax):
        print('|',end='')
        for item in data:
                if XMax - i - item > 0:
                        print(' ',end='')
                else:
                        print('*',end='')
        print('')
print('------------------------------------')
print(' 12345678910 11 12')

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

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

yjsx86 发表于 2018-1-14 00:58:54

L =
Max = 9
while Max > 0:
    print('| '+'    '.join(['*' if x >= Max else ' ' for x in L]))
    Max -= 1
print('-' * 60)
print(''+' '.join(['%02d月'% x for x in range(1,13)]))

wyp02033 发表于 2018-1-14 21:44:52

def show_histogram(ls):
    max_len = max(ls)
    histogram = [('*' * each).rjust(max_len) for each in ls]
    for i in range(max_len):
      print('|', end=' ')
      for j in range(len(ls)):
            print(histogram.center(7), end='')

      print()
    print('_' * (12 * 7 + 1))
    print('|', end=' ')
    months = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
    for each in months:
      print(each.center(6), end='')
ls =
show_histogram(ls)
结果
|                         *                                                       *   
|                         *                                       *             *   
|    *                  *                                       *             *   
|    *                  *                                       *             *   
|    *                  *      *                                  *             *   
|    *                  *      *             *                  *             *   
|    *      *             *      *             *                  *      *      *   
|    *      *      *      *      *             *             *      *      *      *   
|    *      *      *      *      *      *      *             *      *      *      *   
_____________________________________________________________________________________
|   1月    2月    3月    4月    5月    6月    7月    8月    9月   10月   11月   12月

coopr 发表于 2018-1-14 23:20:45

datalist =
i = max(datalist)
list1 = [[],[],[],[],[],[],[],[],[],[],[],[]]
list2 = [[],[],[],[],[],[],[],[],[],[],[],[]]
for j in range(0,12):
        list1 = (i-datalist)*" " + datalist * "*"
for k in range(0,12):
        for each in list1:
                list2.append(each)
for k in range(0,i):
        print("|",end=" ")
        for j in range(0,12):
                print(list2,end= "    ")
        print("\n")
print("------------------------------------------------------------")
print(" 1月2月3月4月5月6月7月8月9月10月 11月 12月")

graceasyi 发表于 2018-1-15 13:26:50

我是菜鸟,请多多指教~{:5_92:}

list1 =
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)):
    tmp = []
    for r in range(len(l1)):
      tmp.append(l1)
    print('   '.join(tmp))
print("____________________________________________________________________________")
print("   1月   2月   3月   4月   5月   6月   7月   8月   9月   10月   11月   12月")

结果:

lihw 发表于 2018-1-15 19:04:46

list1=
list2=["1月","2月","3月","4月","5月","6月","7月","8月","9月",
       "10月", "11月", "12月",]
m= max(list1)

for i in range (11):
    if i <9:
      print("|",end="")
      for j in list1:
            if j >= m:
               print("*"+" "*2,end=" ")
            else:
                print(" "+" "*2,end=" ")
      m=m-1
    if i==9:
      print("-"*48)
    if i ==10:
      for t in range(12):
            print(" "+list2,end="")
    print("\n")   
   

yangyaoyao 发表于 2018-1-15 19:30:58

怎么看答案

大头目 发表于 2018-1-15 20:18:48

本帖最后由 大头目 于 2018-1-15 20:21 编辑

lista=

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

ouyunfu 发表于 2018-1-15 21:49:03

A =
B=['','','','','','','','','','','','','']
M=9
for Month in range(M):
    for i in range(len(A)):
      B = '|'
      if A-M>=0:
            B='*'
      else:
            B = ' '

    print(B,'    ', B,'    ', B,'    ', B,'    ', B,'    ', B,'    ', B,'    ', B,'    ', B,'    ', B,'    ', B,'    ',B,'    ', B)

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

h20060304 发表于 2018-1-15 23:24:52

https://www.jianshu.com/p/910c72caca5d

链接贴到这里来

小菜饼 发表于 2018-1-16 09:29:50

我想知道答案
{:10_254:}

独宠编程 发表于 2018-1-16 10:40:14

date=
i=9
for n in range(9):
    print('|',end="")
    for x in range(12):
      #print(date,end=" ")
      if date>=i:
            print('*',end="   ")
      else:
            print(' ',end="   ")
    print("\n")
    i-=1
for x in range(47):
    print('-',end='')
print()
for x in range(12):
    print(str(x+1)+"月",end=" ")
我是新手,请问如何能学习到其他人的解答方式呢,这样就可以学习更多的思路了{:10_256:}

Elastcio 发表于 2018-1-16 12:35:11

list1 =

for cow in range(1,10):
    print("| ",end="")
    for each in list1:
      if each >= 10-cow:
            print("*\t",end="")
      else:
            print("\t",end="")
    print("\n")
   
print("-"*90)
for i in range(1,13):
    print("%d月\t"%i, end="")

achencan 发表于 2018-1-19 12:52:11

list_1=
a=max(list_1)
while a>0:
    list_2=
    for num in list_2:
            if num==0 or num<0:
                print("*",end='')
            else:
                print(" ",end='')
    print('\n')
    a=a-1
页: [1] 2
查看完整版本: Python:每日一题 140