Python:每日一题 66
本帖最后由 ooxx7788 于 2017-6-16 19:04 编辑本题来自群友,顺便宣传下群号:528770819,由风介大佬带领茫茫多的python区版主的官方群哦。
题目如图片。什么意思呢?
当输入1的时候,就返回1
输入2的时候呢,就要根据前面一个了, 前面是1,那么我们就读作 1个1, 返回值就是11
输入3的时候呢,前面是11,那么我们就读作 2个1, 返回值就是21
输入4的时候呢,前面是21,那么我们就读作 1个2,1个1, 返回值就是1211
输入5的时候呢,前面是1211,那么我们就读作 1个1,1个2,2个1 返回值就是111211
好了,说完了,可以愉快的开始了!
**** Hidden Message ***** 先抛砖吧,等着高手的杰作。
def f(num):
s = '1'
for i in range(2, num + 1):
c = s
count = 0
s1 = ''
for j in s:
if j == c:
count += 1
else:
s1 += str(count) + c
c = j
s1 += str(count) + c
s = s1
return s 以前在我的小练习中已经算过了
http://bbs.fishc.com/thread-79263-1-1.html 本帖最后由 jerryxjr1220 于 2017-6-15 15:37 编辑
改进了一下,用昨天提到的groupby的函数
def cns(n):
from itertools import groupby
count_and_say = '1'
for i in range(1, n):
count_and_say = ''.join()
return count_and_say jerryxjr1220 发表于 2017-6-15 15:33
改进了一下,用昨天提到的groupby的函数
嘿嘿,你懂我~ a =
num = int(input('please enter number:'))
for n in range(1,num):
s = str(a[-1])
L = len(s)
if L is 1:
a.append(int('1'+s[-1]))
elif L is 2:
if s is s:
a.append(int('2'+s))
else:
a.append(int('1'+s+'1'+s))
else:
j = 0
temp = ''
for i in range(L):
if s is nots:
temp += str(i-j) + s
j = i
if i is L-1:
temp += '1'+s
else:
if i is L-1:
temp += str(i-j+1) + s
a.append(int(temp))
print (a)
please enter number:6
我的方法比较笨
撤~观摩大佬的代码去{:5_98:} {:5_98:} a =
n = int(input('please enter number:'))
for num in range(1,n):
s = str(a[-1])
j = 0
temp = ''
for i in range(0,len(s)):
if s.count(s,j,i) is s.count(s,j,i+1):
temp += str(s.count(s,j,i)) + str(s)
if i+1 is len(s):
temp += '1'+s[-1]
j = i
else:
if i+1 is len(s):
temp += str(s.count(s,j)) + str(s)
a.append(int(temp))
print(a)
please enter number:5
这次用到了字符串的count()方法,不过感觉还是有点赘述的感觉{:5_94:} {:5_94:} Teagle 发表于 2017-6-16 16:17
这次用到了字符串的count()方法,不过感觉还是有点赘述的感觉
你写的这个也不出错,虽然性能上不见得很好,但是可以综合应用到不少的知识点。
你可以往前翻一题,65题里面sixpy也提供了一种不错的分类代码,可以参考参考。 ooxx7788 发表于 2017-6-16 19:08
你写的这个也不出错,虽然性能上不见得很好,但是可以综合应用到不少的知识点。
你可以往前翻一题,65题 ...
感谢大佬,今天我会看的,刚做完‘jerryxjr1220’大神的python挑战赛,很忐忑,很憔悴{:5_99:} {:5_99:} Teagle 发表于 2017-6-17 02:48
感谢大佬,今天我会看的,刚做完‘jerryxjr1220’大神的python挑战赛,很忐忑,很憔悴
哈哈,jerry的这个题目还是有点难的,我反正是不会。这个需要学过数据结构和算法的人做起来才比较有下手的地方。 from itertools import groupby as gb
def reading(s):
lst = []#获取s包含的相同且相连元素及其个数
for k,v in gb(s):
lst.append(k)#加入元素
lst.append(len(list(v))) #加入元素长度
str1 = '' #将元素个数及元素组合为字符串
for each in range(1,len(lst),2):
str1 += str(lst)
str1 += lst
print str1
s = str(1211)
reading(s)
#111221
q=['1']
n=6
for i in q:
p=i#p
c=1#
t='' #
for j in i:
if j==p:#1
c+=1
else:#
t+=str(c)+p
c,p=1,j
t+=str(c)+p
q.append(t)
if len(q)>=n:break
print(q)
读法是根据连续重复的字符串元素,给出元素数量和元素名组合,str(len(i))+i
def odd_list(n):
"""odd_list(integer) -> str, return the n~th element of the odd List"""
s = ["1"] # n=1时定义是手动完成,所以下面k的循环少了1层
for k in range(1,n):
temp = []
length = len(s)
for i in s[:]:
if i in temp:
temp.append(i)
else:
if temp:
s += ]
temp =
s += ]
s = s
return "".join(s) if n>0 else None
然后用re模块,递归做了一个
import re
def odd_list2(n,txt='1'):
if n<=1:
return txt if n>0 else None
else:
return odd_list2(n-1,"".join(["".join((str(len(i.group())),i.group())) for i in re.finditer(r'(\d)\1*',txt)])) ooxx7788 发表于 2017-6-17 08:38
哈哈,jerry的这个题目还是有点难的,我反正是不会。这个需要学过数据结构和算法的人做起来才比较有下手 ...
哈哈哈哈,这个我深有体会{:10_258:}
其实我一开始是先搜到jerry大神的小练习的,做了六七题发现不会算法根本做不下去{:10_245:}
然后找到这个新手向的每日一题
有时间就每天一两题,一直做过来确实感觉到进步,赞一个楼主们{:10_275:}
楼主往后完全可以继续开帖啊,
anyway {:10_275:} import itertools
def func(n):
if n < 1:
return None
elif n == 1:
return '1'
else:
s = []
for key, group in itertools.groupby(func(n-1)):
s.append(str(len(list(group))))
s.append(key)
return ''.join(s)
for i in range(1,6):
print(i,'-->',func(i))
import re
def generator():
n = '1'
pattern = re.compile(r'((?P<w>\d)(?P=w)*)')
while True:
temp = ''
yield n
l = pattern.findall(n)
for x in l:
temp += str(len(x))+x
n = temp 不懂 = = from itertools import groupby as gb
def foo(nums):
if nums == 1:
return '1'
elif nums == 2:
return '11'
else:
n = '11'
while nums-2:
count = 1
for a,b in zip(n,n+'\0'):
if a==b:
count+= 1
else:
n += str(count)+str(a)
nums -= 1
print(n)
本帖最后由 Geoffreylee 于 2020-3-4 17:01 编辑
from itertools import groupby
def f_66(n):
# 生成器
def generator():
num = '1'
while True:
yield num
lst = []
for key, group in groupby(str(num)):# groupby统计每个key的数量
lst.append(str(len(list(group))))# key 和 数量放进列表中
lst.append(key)
num = ''.join(lst)# 返回下个num
a = generator()
for i in range(1, n+1):
print("{} : {}".format(i, next(a)))
f_66(7)
页:
[1]
2