冬雪雪冬 发表于 2017-9-20 20:19:22

Python:每日一题 102

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

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

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

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

suloman 发表于 2017-9-21 09:33:50

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)

baicel21314 发表于 2017-9-21 10:36:03

list1=[-3.14,0.7177,1586.23,10000.0,-587643.1,12.34565]
max1=0
n=1
p=0
list2=[]
for i in list1:
    if i<0:
      p=1
    else:
      p=0
    while int(i/10)!=0:
      i//=10
      n+=1
    list2.append(n+p)
    n=1
max1=max(list2)
j1=0
for j in list2:
    print((' ')*(max1-j),list1)
    j1+=1

wyp02033 发表于 2017-9-21 10:48:17

def print_float_num(ls):
    str_ls = []
    max_len = 0
    for each in ls:
      split_str = str(each).split('.')
      str_ls.append(split_str)

      if len(split_str) > max_len:
            max_len = len(split_str)

    for each in str_ls:
      print(each.rjust(max_len),end = '')
      print('.' + each)

ls = [-3.14, 0.7177, 1586.23, 10000.0, -587643.1, 12.34565]
print_float_num(ls)

suloman 发表于 2017-9-21 12:57:24

def duiqi(a):
   m=len(str(max( 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)
前面有点小问题

jerryxjr1220 发表于 2017-9-21 13:03:28

num = [-3.14,0.7177,1586.23,10000.0,-587643.1,12.34565]
for i in num:
        print(' '*(max() for e in num])-len(str(i).split('.'))), str(i), sep='')

jerryxjr1220 发表于 2017-9-21 13:03:41

num = [-3.14,0.7177,1586.23,10000.0,-587643.1,12.34565]
for i in num:
        print(' '*(max() for e in num])-len(str(i).split('.'))), str(i), sep='')

流浪1123 发表于 2017-9-21 13:57:57

本帖最后由 流浪1123 于 2017-9-21 14:00 编辑

需要先把数存放到 lst =[] 中。
'''
题目:
有一组浮点数,将其每行打印一个,要求纵向小数点对齐,并小数点前位数最大的数紧贴左边界。
例如:-3.14;0.7177;1586.23;10000.0;-587643.1;12.34565
打印示意如下:
   -3.14
      0.7177
   1586.23
10000.0
-587643.1
   12.34565
'''
######################################################################
lst =
n = 0
m = 0
k = 0
maxindex = []
index_lst = []
position = []
#将lst中值转变为字符串输入为position
for i in range(0,len(lst)):
    position.append((str(lst)))
    n = n + 1

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

#生成有每行的空白个数的list
while k < len(lst):   
    maxindex.append(max(index_lst)-index_lst)
    print(' ' * maxindex,position)
    k = k +1

solomonxian 发表于 2017-9-21 18:17:38

取小数点前长度,根据长度差补充空格,打印
def fun(lst):
    length =
    print(*[" "*(max(length)-i) + str(j) for i, j in zip(length, lst)], sep='\n')

古堡主人。 发表于 2017-9-21 21:10:54

x=[-3.14,0.7177,1586.23,10000.0,-587643.1,12.34565,10]
def myprint(x):
    x=
    lenl=max()
    for p in x:
      if p.find('.')==-1:
            print(' '*(lenl-len(p))+p)
            continue
      print(' '*(lenl-p.find('.'))+p)
myprint(x)

古堡主人。 发表于 2017-9-21 21:27:10

本帖最后由 古堡主人。 于 2017-9-21 21:28 编辑

写长点显得屌
x=[-3.14,0.7177,1586.23,10000.0,-587643.1,12.34565,10]
def myprint(x):
    x=
    lenl=max()
    for p in x: print(' ' * (lenl - len(p)) + p) if p.find('.') == -1 else print(' '*(lenl-p.find('.'))+p)
myprint(x)

bush牛 发表于 2017-9-21 22:04:32

s = '-3.14;0.7177;1586.23;10000.0;-587643.1;12.34565'
raw_list = s.split(';')
max_len = max(len(i.split('.')) for i in raw_list)
for i in raw_list:
    if len(i.split('.')) < max_len:
      raw_list = ' ' * (max_len - len(i.split('.'))) + i

for i in raw_list:
    print(i)

销赃1994 发表于 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))

白牙 发表于 2017-9-22 10:03:12

本帖最后由 白牙 于 2017-9-22 10:05 编辑


def lists(a_list):
    n=0
    a=len(a_list)
    b=[]
    #print(a)
    while a>n:
      c=str(int(a_list//1))
      b.insert(n,len(c))
      n+=1
      #print(b)   
    c=max(b)
    d=0
    while a>d:
      m=int(c)-int(b)
      print(' '*m+str(a_list))
      d+=1


lists([-3.14,0.7177,1586.23,10000.0,-587643.1,12.34565])
{:10_242:} 写好啦

一叶知秋非本意 发表于 2017-9-22 10:24:53

想了半天 好奇答案是什么 急死我了

迷失的飞鱼 发表于 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:
      ifj == '.':
            break
      temp += 1
      iftemp > max1:
            max1 = temp
    m.append(temp)

for i inrange(len(digits)):
    print(" "*(max1 - m ) + digits)

迷失的飞鱼 发表于 2017-9-22 13:56:07

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:
      ifj == '.':
            break
      temp += 1
      iftemp > max1:
            max1 = temp
    m.append(temp)

for i inrange(len(digits)):
    print(" "*(max1 - m ) + digits)

pynliu 发表于 2017-9-22 15:38:17

list1 = [-3.14, 0.7177, 1586.23, 10000.0, -587643.1, 12.34565]
max_l = max(len(str(x).split('.')) for x in list1)
print_f = "%%%ds.%%s" % max_l
for i in list1:
    l, r = str(i).split('.')
    print(print_f % (l, r))

流月飞星 发表于 2017-9-22 15:40:51

{:10_249:}

gunjang 发表于 2017-9-22 16:02:42

def convertFit(alist):
        widths =
        maxw = max(widths)
        for i, f in enumerate(alist):
                print(' '*(maxw-widths) + str(f))

convertFit([-3.14,0.7177,1586.23,10000.0,-587643.1,12.34565])
页: [1] 2
查看完整版本: Python:每日一题 102