鱼C论坛

 找回密码
 立即注册
楼主: zltzlt

[已解决]Python:每日一题 341

[复制链接]
发表于 2020-3-2 22:34:18 | 显示全部楼层
  1. def fun341(s):
  2.     len_s = len(s)
  3.     min_len = len(set(s))  # 子字符串最少应当包含所有的不重复元素
  4.     substr = s[:min_len - 1]
  5.     for i in range(min_len - 1, len(s) // 2 + 1):
  6.         substr += s[i]
  7.         len_sub = len(substr)
  8.         if len_s % len_sub == 0:  # 长度匹配的情况下才需要进行判断
  9.             for j in range(2, len_s // len_sub + 1):
  10.                 if substr * j == s:
  11.                     return True

  12.     return False
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 22:37:48 | 显示全部楼层    本楼为最佳答案   
  1. def f341(string):
  2.     lenth1 = len(string)
  3.     lenth2 = lenth1 // 2
  4.     for i in range(lenth1//2):
  5.         if lenth1%lenth2 == 0:
  6.             n = lenth1 / lenth2
  7.             if int(n) * string[:lenth2] == string:
  8.                 return 1
  9.         lenth2 -=1
  10.             
  11.     return 0



  12. string = str(input('请输入一个字符串:'))

  13. if f341(string):
  14.     print("是由一个子串重复多次构成!")
  15. else:
  16.     print("不是由一个子串重复多次构成!")
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 22:40:10 | 显示全部楼层
猫记 发表于 2020-3-2 21:50
def f341(s):
    list1 = []
    s_len = len(s)

先点击<>将代码复制到上面点击确定,然后点击纯文本旁边的那个对号就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 23:07:33 | 显示全部楼层
str1 = input('输入:')
number = len(str1)
for a in range(1,(int(number/2))):
        str2 = str1[:a]
        for b in range(0,number,a):
                if str1[b:b+a] != str2:
                        break
        else:
                print('输出:True')
                number1 = int(number/(len(str2)))
                list1 = ('一','二','三','四','五','六','七','八','九','十')
                print('解析:可有子字符“%s”重复%s次构成。'%(str2,list1[number1-1]))
cfbb48c1e1782a4634dac8956392fe7.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 00:22:06 | 显示全部楼层
本帖最后由 walleeee 于 2020-3-3 00:39 编辑
  1. string=input('输入:')

  2. booll= False

  3. for i in range(len(string)-1):
  4.     booll=booll or (string[0:i+1]*(len(string)//(i+1))==string)

  5. print(booll)
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 00:46:37 | 显示全部楼层
  1. import re

  2. def func(s):
  3.     pat = re.compile(r"^([a-z]+)\1+$")
  4.     return bool(pat.search(s))
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
zltzlt + 4 + 4

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 05:31:00 | 显示全部楼层
  1. import collections
  2. def fun(s):
  3.         return len(set(collections.Counter(s).values())) == 1
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
zltzlt + 1 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 09:25:58 | 显示全部楼层
  1. import math
  2. def action(s:str):
  3.     def cool(n:int):
  4.         l=[]
  5.         m=2
  6.         if n%2==0:
  7.             m=1
  8.         for i in range(1,int(math.sqrt(n))+1,m):
  9.             if n%i==0:
  10.                 l.append(i)
  11.                 l.append(n//i)
  12.         l.remove(n)
  13.         return list(set(l))
  14.     nums=cool(len(s))
  15.     for i in nums:
  16.         string=s.split(s[:i])
  17.         if len(set(string))==1 and set(string).pop()=='':
  18.             return True
  19.     return False
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 09:45:52 | 显示全部楼层
本帖最后由 wuqramy 于 2020-3-3 09:47 编辑
一个账号 发表于 2020-3-2 20:59
你哪弄来这么大的数据


乱敲键盘 + 无数个Ctrl+v 即可
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 09:49:17 | 显示全部楼层
黎影 发表于 2020-3-2 23:07
str1 = input('输入:')
number = len(str1)
for a in range(1,(int(number/2))):

不用那么麻烦,直接返回 True 或 False 即可
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 09:58:41 | 显示全部楼层
黎影 发表于 2020-3-2 23:07
str1 = input('输入:')
number = len(str1)
for a in range(1,(int(number/2))):

万一你遇到了这样的字符串怎么办:
  1. abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
复制代码

由abcdefghijklmnopqrstuvwxyz循环组成
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-3 10:09:27 | 显示全部楼层
@一个账号 @wuqramy 不要刷屏
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 10:11:14 | 显示全部楼层
zltzlt 发表于 2020-3-3 10:09
@一个账号 @wuqramy 不要刷屏

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 10:13:24 | 显示全部楼层
本帖最后由 Lyton_ 于 2020-3-3 10:35 编辑
  1. def fun21(str1):
  2.     i=2
  3.     count=0
  4.     while i<len(str1):
  5.         str2=str1[:i]
  6.         i+=1
  7.         if str1.count(str2)>1:
  8.             count+=1
  9.     if count==0:
  10.         print('False')
  11.     else:
  12.         print('True')
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 10:15:34 | 显示全部楼层
zltzlt 发表于 2020-3-3 10:09
@一个账号 @wuqramy 不要刷屏

你也在刷
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 10:40:03 | 显示全部楼层
  1. def f341():
  2.     str1=input("输入字符串: ")
  3.     if len(str1)==1:
  4.         return True
  5.     for i in range(1,len(str1)):
  6.         times=str1.count(str1[0:i])
  7.         if times==float(len(str1)/i):
  8.             return True
  9.     else:
  10.         return False
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 10:42:42 | 显示全部楼层
大半个月不写python手都生了,返回类型应该写成"=>"还是'->'都反应了半天
  1. def func(sz:str)->bool:
  2.     l=len(sz)
  3.     if (l<2):
  4.         return False
  5.     next=[-1,0]
  6.     p,q=0,1
  7.     while q<l:
  8.         while p!=-1 and (l%(q-p)!=0 or sz[q]!=sz[p]):
  9.             p=next[p]
  10.         if q-p>l/2:
  11.             break
  12.         p+=1
  13.         q+=1
  14.         next.append(p)
  15.         if q==l:
  16.             return True
  17.     return False
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 10:45:13 | 显示全部楼层
本帖最后由 一个账号 于 2020-3-3 10:50 编辑
zltzlt 发表于 2020-3-2 20:48
输入以下数据超时:


之前那个我有很多多余的步骤,现在应该快很多了吧:

  1. def func(str1 : str) -> bool:
  2.     if len(str1) % 2:
  3.         return False
  4.     str2 = ""
  5.     str3 = ""
  6.     for i in range(len(str1)//2):
  7.         str2 += str1[i]
  8.         for j in range(i+1, i+len(str2)+1):   
  9.             str3 += str1[j]
  10.             if str2 == str3:
  11.                 if j == len(str1)-1:
  12.                     return True
  13.                 str3 = ""
  14.         str3 = ""
  15.     return False
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-3 10:48:36 | 显示全部楼层
一个账号 发表于 2020-3-3 10:45
之前那个我有很多多余的步骤,现在应该快一点了吧:

改良一下你的双重 for
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 10:49:10 | 显示全部楼层
zltzlt 发表于 2020-3-3 10:48
改良一下你的双重 for

什么意思?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 10:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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