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: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)
#
#数字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)) 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: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)
排序结果: 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))) 看看答案
真的想不出来 比较菜,代码很陋,就做个简单的
---------------------------
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)
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: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)
递归,各位数相加直到只剩一位数,按要求排序
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))) 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
感觉写的有点麻烦 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)
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)) 数位相加用递归倒是没有什么问题。
按照规定的序列排序倒是有点烧脑子,代码看着有点繁琐。不过结果在这里:
排序前:
排序后:
# -*- 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: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)
代码感觉写的有点长,没有精简。 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) 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) 需要什么基础才能写出,老师?
页:
[1]
2