鱼C论坛

 找回密码
 立即注册
查看: 4014|回复: 31

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

[复制链接]
发表于 2017-9-20 20:19:22 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 冬雪雪冬 于 2017-9-22 19:45 编辑

首先我们的玩法做了一下改变:
1. 楼主不再提供答案。
2. 为了让大家独立思考,跟帖改为“回帖仅作者可见”。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
有一组浮点数,将其每行打印一个,要求纵向小数点对齐,并小数点前位数最大的数紧贴左边界。
例如:-3.14;0.7177;1586.23;10000.0;-587643.1;12.34565
输出为:
  1.      -3.14
  2.       0.7177
  3.    1586.23
  4.   10000.0
  5. -587643.1
  6.      12.34565
复制代码


注意预先不知道最大的位数是多少。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-21 09:33:50 From FishC Mobile | 显示全部楼层
def duiqi(a):
   m=len(str(max(int(i) for i in a)))
   for i in a:
       g=len(str(int(i)))
       print(" "*(m-g),i)

a=-3.14,0.7177,1586.23,10000.0,-587643.1,12.34565

duiqi(a)

点评

-587643.1没有对齐  发表于 2017-9-21 10:47
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-21 10:36:03 | 显示全部楼层
  1. list1=[-3.14,0.7177,1586.23,10000.0,-587643.1,12.34565]
  2. max1=0
  3. n=1
  4. p=0
  5. list2=[]
  6. for i in list1:
  7.     if i<0:
  8.         p=1
  9.     else:
  10.         p=0
  11.     while int(i/10)!=0:
  12.         i//=10
  13.         n+=1
  14.     list2.append(n+p)
  15.     n=1
  16. max1=max(list2)
  17. j1=0
  18. for j in list2:
  19.     print((' ')*(max1-j),list1[j1])
  20.     j1+=1

复制代码

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-21 10:48:17 | 显示全部楼层
  1. def print_float_num(ls):
  2.     str_ls = []
  3.     max_len = 0
  4.     for each in ls:
  5.         split_str = str(each).split('.')
  6.         str_ls.append(split_str)

  7.         if len(split_str[0]) > max_len:
  8.             max_len = len(split_str[0])

  9.     for each in str_ls:
  10.         print(each[0].rjust(max_len),end = '')
  11.         print('.' + each[1])

  12. ls = [-3.14, 0.7177, 1586.23, 10000.0, -587643.1, 12.34565]
  13. print_float_num(ls)
复制代码

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-21 12:57:24 From FishC Mobile | 显示全部楼层
def duiqi(a):
   m=len(str(max([int(i)] for i in a)))
   for i in a:
       g=len(str(int(i)))      
       print(" "*(m-g),end="")
       print(i)

a=-3.14,0.7177,1586.23,10000.0,-587643.1,12.34565

duiqi(a)
前面有点小问题

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-21 13:03:28 | 显示全部楼层
  1. num = [-3.14,0.7177,1586.23,10000.0,-587643.1,12.34565]
  2. for i in num:
  3.         print(' '*(max([len(str(e).split('.')[0]) for e in num])-len(str(i).split('.')[0])), str(i), sep='')
复制代码

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-9-21 13:03:41 | 显示全部楼层
  1. num = [-3.14,0.7177,1586.23,10000.0,-587643.1,12.34565]
  2. for i in num:
  3.         print(' '*(max([len(str(e).split('.')[0]) for e in num])-len(str(i).split('.')[0])), str(i), sep='')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-9-21 13:57:57 | 显示全部楼层
本帖最后由 流浪1123 于 2017-9-21 14:00 编辑

需要先把数存放到 lst =[] 中。
  1. '''
  2. 题目:
  3. 有一组浮点数,将其每行打印一个,要求纵向小数点对齐,并小数点前位数最大的数紧贴左边界。
  4. 例如:-3.14;0.7177;1586.23;10000.0;-587643.1;12.34565
  5. 打印示意如下:
  6.      -3.14
  7.       0.7177
  8.    1586.23
  9.   10000.0
  10. -587643.1
  11.      12.34565
  12. '''
  13. ######################################################################
  14. lst = [2.2,12.77773555,121.34,52311.456789]
  15. n = 0
  16. m = 0
  17. k = 0
  18. maxindex = []
  19. index_lst = []
  20. position = []
  21. #将lst中值转变为字符串输入为position
  22. for i in range(0,len(lst)):
  23.     position.append((str(lst[n])))
  24.     n = n + 1

  25. #匹配字符串,查找'.'的位置并返回索引值
  26. if m < len(position):
  27.     for i in position:
  28.         if '.' in i:
  29.             index_lst.append(i.find('.'))
  30.             m = m + 1

  31. #生成有每行的空白个数的list
  32. while k < len(lst):   
  33.     maxindex.append(max(index_lst)-index_lst[k])
  34.     print(' ' * maxindex[k],position[k])
  35.     k = k +1
复制代码

360截图20170921135813511.jpg

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-21 18:17:38 | 显示全部楼层
取小数点前长度,根据长度差补充空格,打印
  1. def fun(lst):
  2.     length = [len(str(int(i))) for i in lst]
  3.     print(*[" "*(max(length)-i) + str(j) for i, j in zip(length, lst)], sep='\n')
复制代码

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-21 21:10:54 | 显示全部楼层
  1. x=[-3.14,0.7177,1586.23,10000.0,-587643.1,12.34565,10]
  2. def myprint(x):
  3.     x=[str(p) for p in x]
  4.     lenl=max([p.find('.')for p in x])
  5.     for p in x:
  6.         if p.find('.')==-1:
  7.             print(' '*(lenl-len(p))+p)
  8.             continue
  9.         print(' '*(lenl-p.find('.'))+p)
  10. myprint(x)
复制代码

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-21 21:27:10 | 显示全部楼层
本帖最后由 古堡主人。 于 2017-9-21 21:28 编辑

  写长点显得屌
  1. x=[-3.14,0.7177,1586.23,10000.0,-587643.1,12.34565,10]
  2. def myprint(x):
  3.     x=[str(p) for p in x]
  4.     lenl=max([p.find('.')for p in x])
  5.     for p in x: print(' ' * (lenl - len(p)) + p) if p.find('.') == -1 else print(' '*(lenl-p.find('.'))+p)
  6. myprint(x)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-21 22:04:32 | 显示全部楼层
  1. s = '-3.14;0.7177;1586.23;10000.0;-587643.1;12.34565'
  2. raw_list = s.split(';')
  3. max_len = max(len(i.split('.')[0]) for i in raw_list)
  4. for i in raw_list:
  5.     if len(i.split('.')[0]) < max_len:
  6.         raw_list[raw_list.index(i)] = ' ' * (max_len - len(i.split('.')[0])) + i

  7. for i in raw_list:
  8.     print(i)
复制代码

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-22 01:42:42 | 显示全部楼层
print('输入五个数')
list1 = []
i = 1

while i < 6:
    x = float(input("输入第%d个数:" % i))
    list1.append(x)
    i += 1

a = max(list1)
a1 = int(a)
b = min(list1)
b1 = int(b)
aw = len(str(a1))
bw = len(str(b1))
n = max(aw, bw)

for each in list1:
    k = len(str(int(each)))
    m = n - k
    print(" " * m +str(each))

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-22 10:03:12 | 显示全部楼层
本帖最后由 白牙 于 2017-9-22 10:05 编辑

  1. def lists(a_list):
  2.     n=0
  3.     a=len(a_list)
  4.     b=[]
  5.     #print(a)
  6.     while a>n:
  7.         c=str(int(a_list[n]//1))
  8.         b.insert(n,len(c))
  9.         n+=1
  10.         #print(b)   
  11.     c=max(b)
  12.     d=0
  13.     while a>d:
  14.         m=int(c)-int(b[d])
  15.         print(' '*m+str(a_list[d]))
  16.         d+=1
复制代码


  1. lists([-3.14,0.7177,1586.23,10000.0,-587643.1,12.34565])
复制代码

写好啦

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-22 10:24:53 | 显示全部楼层
想了半天 好奇答案是什么 急死我了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-22 13:55:11 | 显示全部楼层
digits = ["-3.14","0.7177","1586.23","10000.0","-587643.1","12.34565"]
max1 = 0
m = []
for i in digits:
    temp = 0
    for j in i:
        if  j == '.':
            break
        temp += 1
        if  temp > max1:
            max1 = temp
    m.append(temp)

for i in  range(len(digits)):
    print(" "*(max1 - m[i] ) + digits[i])

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-22 13:56:07 | 显示全部楼层
  1. digits = ["-3.14","0.7177","1586.23","10000.0","-587643.1","12.34565"]
  2. max1 = 0
  3. m = []
  4. for i in digits:
  5.     temp = 0
  6.     for j in i:
  7.         if  j == '.':
  8.             break
  9.         temp += 1
  10.         if  temp > max1:
  11.             max1 = temp
  12.     m.append(temp)

  13. for i in  range(len(digits)):
  14.     print(" "*(max1 - m[i] ) + digits[i])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-22 15:38:17 | 显示全部楼层
  1. list1 = [-3.14, 0.7177, 1586.23, 10000.0, -587643.1, 12.34565]
  2. max_l = max(len(str(x).split('.')[0]) for x in list1)
  3. print_f = "%%%ds.%%s" % max_l
  4. for i in list1:
  5.     l, r = str(i).split('.')
  6.     print(print_f % (l, r))
复制代码

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-22 15:40:51 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-22 16:02:42 | 显示全部楼层
  1. def convertFit(alist):
  2.         widths = [len(str(int(x))) for x in alist]
  3.         maxw = max(widths)
  4.         for i, f in enumerate(alist):
  5.                 print(' '*(maxw-widths[i]) + str(f))

  6. convertFit([-3.14,0.7177,1586.23,10000.0,-587643.1,12.34565])
复制代码

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 19:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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