冬雪雪冬 发表于 2017-11-5 17:03:37

Python:每日一题 121

本帖最后由 冬雪雪冬 于 2017-11-10 15:19 编辑

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

题目:
这是一个排序的练习。
有如下的一个列表:
list1 =
要求先求出各位之和,如果结果不是一位数,继续此步骤,直到成为1~9的数字,例如684各位之和为18,再次运算为9,然后对其排序,排序不是从1到9,也不是从9到1,是按照下面列表的次序。
list2 =
最后给出list1排序后的列表。

SixPy 发表于 2017-11-5 18:05:00

本帖最后由 SixPy 于 2017-11-5 18:18 编辑

list1 =
list2 =
order = {n:i for i,n in enumerate(list2)}

def x(n):
    while n>9:
      n = sum(int(i)for i in str(n))
    return order

list1.sort(key=x)
print(list1)
#

wc365 发表于 2017-11-6 00:11:16

#数字n先求出各位之和,如果结果不是一位数,继续此步骤,直到成为1~9的数字
def sumbit(n):
    while n > 9:
      total = 0
      for each in list(str(n)):
            total += eval(each)
      n = total
    return n

#序列list1按照序列list2的顺序排列
def sortlist(list1,list2):
    list3 = [ for x in list1]
    list4 = []
    for i in list2:
      for j in range(len(list3)):
            if i == list3:
                list4.append(list3)
    return list4

list1 =
list2 =
print(sortlist(list1,list2))

BngThea 发表于 2017-11-6 09:49:21

list1 =
list2 =

tar = []

for each in list1:
    while each > 9:
      each = sum(map(int, str(each)))
    tar.append(each)

tar = sorted(tar, key = lambda x: list2.index(x))
print(tar)

wyp02033 发表于 2017-11-6 11:03:03

本帖最后由 wyp02033 于 2017-11-6 11:16 编辑

def get_index(num):
    if num < 10:
      return num

    else:
      new_num = 0
      for each in str(num):
            new_num += int(each)
      return get_index(new_num)

list1 =
index_list = []
for each in list1:
    index_list.append(get_index(each))

the_order = {1:0, 6:1, 7:2, 4:3, 9:4, 3:5, 2:6, 5:7, 8:8}
num_order = []
for each in index_list:
    num_order.append(the_order)

sorted_order = sorted(num_order)

new_list = []
for each in sorted_order:
    new_list.append(list1)
    list1.remove(list1)
    num_order.remove(each)

print(new_list)

排序结果:

bush牛 发表于 2017-11-6 14:15:02

def len_sum(n:int):
    if n < 10:
      return n
    else:
      n = str(n)
      s_sum = sum(int(i) for i in n)
      if len(str(s_sum)) > 1:
            s_sum = len_sum(s_sum)
      return s_sum

list1 =
list2 =
list3 = [(len_sum(i), i) for i in list1]

from collections import defaultdict
d = defaultdict(list)
for k, v in list3:
    d.append(v)

list4 = for i in list2 if i in d.keys()]
from itertools import chain
print(list(chain(*list4)))

无边落木 发表于 2017-11-6 14:57:10

看看答案

ytbihpl2017 发表于 2017-11-6 16:03:43

真的想不出来

飞非妃飞飞 发表于 2017-11-6 16:27:17

比较菜,代码很陋,就做个简单的
---------------------------
def toList(numbers):
    List =
    return List

if __name__ == "__main__":
    L = toList();
    a=[]
    t=[for I in L]
    print(t)
    print(type(len(t)))
    for i in t:
      print(sum(i))
      if sum(i)>10:
       a.append(sum(i))
    print(a)
    K=toList(a)
    if __name__ == "__main__":
   print(K)
   ba = []
   bt = [ for I in K]
   print(bt)
   for i in bt:
         print(sum(i))
         ba.append(sum(i))
   print(ba)

renze 发表于 2017-11-6 17:18:39


list1 =
list2 = []

def doit(i):
    add = 0
    sum1 = list(str(i))
    for j in sum1:
      add = add + int(j)
    return add

def sort(in_list):
    for j in range(len(in_list)) :
      if in_list == 1:
            in_list = 1
      elif in_list == 6:
            in_list = 2
      elif in_list == 7:
            in_list = 3
      elif in_list == 4:
            in_list = 4
      elif in_list == 9:
            in_list = 5
      elif in_list == 3:
            in_list = 6
      elif in_list == 2:
            in_list = 7
      elif in_list == 5:
            in_list = 8
      elif in_list == 8:
            in_list = 9
    return in_list
      
   

for i in list1:
    add = doit(i)
    while add > 9 :
      add = doit(add)
    list2.append(add)

list2 = sort(list2)

#list2.sort()
   
print(list2)


   

p5494846 发表于 2017-11-6 17:55:41

本帖最后由 p5494846 于 2017-11-6 17:58 编辑

list1 =
def fun_sum(x):   #定义求位和的函数
        while x > 9:
                x = str(x)
                y = 0
                for n in x:               
                        y += int(n)
                x = y
        return x
list = map(fun_sum,list1)   #得到初始的列表

list_tmp = []
dict = {'1':'1','6':'2','7':'3','4':'4','9':'5','3':'6','2':'7','5':'8','8':'9'}
for num in list:
        tmp = dict
        list_tmp.append(tmp)
list_tmp.sort()#根据映射关系得到值的列表

#以下步骤是利用索引根据dict的值查找键
list_fin = []
key_list = []
value_list = []
for key,value in dict.items():
        key_list.append(key)
        value_list.append(value)       
for x in list_tmp:
        index = value_list.index(x)
        y = key_list
        list_fin.append(y)#根据映射关系反过来得到最终列表
print(list_fin)

solomonxian 发表于 2017-11-6 18:25:42

递归,各位数相加直到只剩一位数,按要求排序
list1 =
list2 =

new_sum = lambda n: n if n<10 else new_sum(sum(int(i) for i in str(n)))
new_list1 =
print(sorted(new_list1, key=lambda x: list2.index(x)))

ooxx7788 发表于 2017-11-6 20:37:23

def foo(num):
    while num >=10:
      num = sum(map(int,list(str(num))))
    return num

list1 =
dict1 = {v:k for k,v in zip(list(map(int,(list('123456789')))),)}
d = {v:k for k,v in dict1.items()}
x = for s in sorted( for r in map(foo,list1)])]
y = list(map(foo,list1))
temp = list(zip(y,list1))
result = []
for i in x:
    for each in range(len(temp)):
      if i == temp:
            result.append(temp.pop(each))
            break

result




感觉写的有点麻烦

编程新血 发表于 2017-11-6 21:34:16

list1 =
list2 =
print(list1)
print(list2)
'''各位加到9'''
def addnum9(x):
    while x>9:
      u=0   
      for i in str(x):
            u+=int(i)
      x=u
    return x
'''list1的数字的排序'''
listcc=[]
for i in list1:
    listcc.append(addnum9(i))
'''组合在一起'''
list4=list(zip(listcc,list1))

list5=[]
for i in list2:
    for i2 in list4:
      if i2==i:
            list5.append(i2)
print(list5)

lihw 发表于 2017-11-6 23:38:21

list1 =
list2=[]
list3=[]
list4=
he=0
def fun(list1):

    for i in list1:
      he=sum(map(int,str(i)))
      if he <=9:
            list2.append(he)
            
      else:
            list1=[]
            list1.append(he)
            fun(list1)
            
    return (sorted(list2,key=list4.index))

xindong 发表于 2017-11-7 08:35:28

数位相加用递归倒是没有什么问题。

按照规定的序列排序倒是有点烧脑子,代码看着有点繁琐。不过结果在这里:
排序前:

排序后:


# -*- coding: utf-8 -*-
"""
Created on Mon Nov6 15:59:02 2017

"""
import numpy as np


def numSum(Num):
    NumOfDigitals = int(np.log10(Num))
    numAdd=0;
    for i in range(NumOfDigitals, 0, -1):
      if ( i == NumOfDigitals):
            Digital = int(Num / pow(10, i))
            numAdd=Digital
            remain = Num - Digital*pow(10,i)
      else:
            Digital = int(remain / pow(10, i))
            numAdd += Digital
            remain = remain - Digital*pow(10,i)
   
    return numAdd + remain

def digitalSum(Num):
    dig_sum = Num
    while(dig_sum > 9):
      dig_sum = numSum(dig_sum)
    return dig_sum
      
list1 =

list2 =
nlist1=[]
for i in list1:
    nlist1.append(digitalSum(i))
   
print(nlist1)


nlist1=[]

for i in list1:
    dig_sum = digitalSum(i)
    if(len(nlist1)==0):
      nlist1.append(dig_sum)
    else:
      index_j = 0
      flag=0
      order_old = list2.index(nlist1)
      order_new = list2.index(dig_sum)
      while (order_new > order_old and flag==0): #and index_j<len(nlist1)-1):
            index_j = index_j + 1
            if (index_j < len(nlist1)):
                order_old = list2.index(nlist1)
            else:
                flag=1

      if (flag==1):
                nlist1.append(dig_sum)
      else:
            nlist1.insert(index_j,dig_sum)
            
print(nlist1)

colinshi 发表于 2017-11-7 10:56:30

本帖最后由 colinshi 于 2017-11-7 10:58 编辑

from functools import reduce
list1 =

def add2(x, y):
    return int(x) + int(y)
def CaiFen(element):
    a = element
    while a > 9:
      a = int(reduce(add2,list(str(a))))
    return a
g=[]
for i in list1:
    g.append(CaiFen(i))
z=zip(g,list1)
dic={}
for k,v in z:
    dic=k
l=[]
list2 =
for i in list2:
    for v,k in dic.items():
      if i == k:
            l.append(v)
print(l)
代码感觉写的有点长,没有精简。

cyz1993 发表于 2017-11-7 11:39:10

list1=
list2 =
num=0
d={}
list3=[]
jud=False
while not jud:
    jud=True
    for each in list1:      
      jud=jud and (each < 10)
         
    for each in list1:
      if each >= 10:
            for i in str(each):
                num +=int(i)
      else:
            num=each
      list3.append(num)
      num=0
    list1=list3[:]
    list3=[]
for i in range(9):
    d]=i
list1.sort(key=lambda x:d)

天使骑魔鬼 发表于 2017-11-7 19:06:41

list1 =
list2 =
list3 = []
while not(set(list1) < set(list2) or set(list1) == set(list2)):
    for i in range(9):
      list1 = sum(map(int,list(str(list1))))
for each in list2:
    for i in range(len(list1)):
      if list1 == each:
            list3.append(list1)
print(list3)

WD2017 发表于 2017-11-8 00:32:20

需要什么基础才能写出,老师?
页: [1] 2
查看完整版本: Python:每日一题 121