鱼C论坛

 找回密码
 立即注册
查看: 7288|回复: 50

Python:每日一题 277

[复制链接]
发表于 2019-11-18 20:49:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zltzlt 于 2019-11-20 21:03 编辑

今天的题目:


给定一个字符串 s,返回 'xyz' 是否在字符串中出现过。

注意:如果 xyz 在字符串中出现过,但它前面一个字符是 .,则这个 "xyz" 不算在字符串中出现过。

示例 1:

输入:'abcxyz'
输出:True
示例 2:

输入:'abc.xyz'
输出:False
示例 3:

输入:'xyz.abc'
输出:True


欢迎大家一起答题!

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-18 20:55:44 | 显示全部楼层
给定一个字符串 s,如果 'xyz' 在 x 中出现过

后面那个 x 是啥?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-18 20:57:54 | 显示全部楼层

改了……

可能我题目表述得不太清楚,我的意思是,如果 xyz 在字符串中出现过,但它前面一个字符是 .,则这个 "xyz" 不算在字符串中出现过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-18 21:08:02 | 显示全部楼层
def fun(s):
    return True if 'xyz' in s and '.xyz' not in s else False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-18 21:09:35 | 显示全部楼层
本帖最后由 阴阳神万物主 于 2019-11-18 21:12 编辑
zltzlt 发表于 2019-11-18 20:57
改了……

可能我题目表述得不太清楚,我的意思是,如果 xyz 在字符串中出现过,但它前面一个字符是 . ...


s = '.xyzxyz'
算返回 True
没错吧
s = '.xyzxyz.xyz'
也是 True 吧?
s = 'xyz.xyz'
也是 True 对吧?
如果我没理解错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-18 21:16:25 | 显示全部楼层
阴阳神万物主 发表于 2019-11-18 21:09
s = '.xyzxyz'
算返回 True
没错吧

是的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-18 21:17:44 | 显示全部楼层

解答错误

输入:'abc.xyzxyz'
输出:False
预期结果:True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-18 21:23:39 | 显示全部楼层
一样的思路,不一样的表示,不晓得有没有区别
solve = lambda s:True if s.count('xyz')-s.count('.xyz') else False
solve_beta = lambda s:bool(s.count('xyz')-s.count('.xyz'))
if __name__ == '__main__':
    print('示例1 True 输出:',solve('abcxyz'))
    print('示例2 False 输出:',solve('abc.xyz'))
    print('示例3 True 输出:',solve('xyz.abc'))
solve 和 solve_beta 在效率上有没有区别啊?
solve_beta 看起来简单点倒是

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1 恭喜通过

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-18 21:27:46 | 显示全部楼层
zltzlt 发表于 2019-11-18 20:57
改了……

可能我题目表述得不太清楚,我的意思是,如果 xyz 在字符串中出现过,但它前面一个字符是 . ...

这样的题目,表述上就是得稍微不清楚一些,不然这难度吗……哈哈

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-18 21:29:20 | 显示全部楼层
zltzlt 发表于 2019-11-18 21:17
解答错误

输入:'abc.xyzxyz'

改写一个。
def fun(s):
    for i in range(len(s) - 2):
        if s[i: i + 3] == 'xyz' and s[i - 1: i + 3] != '.xyz':
            return True
    return False

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-18 21:29:58 | 显示全部楼层
本帖最后由 Stubborn 于 2019-11-18 21:41 编辑
def fun(s:str):
    if '.xyz' in s:return fun(s.replace('.xyz', ''))
    return True if 'xyz' in s else False
def next_smaller(n:int) ->int:
    """
    :[url]https://www.codewars.com/kata/5659c6d896bc135c4c00021e/train/python[/url]
    返回一个比n小的正整数,它有如下要求
    你可以使它的位数进行交换,但是不能修改:
        例如N = 21  你可以把1和2交换,返回一个比N小的整数12,你不能把2 - 1 返回11
    当你找不到一个比N小的整数时,返回-1
    当0不得不占首位时,情况同上,返回-1,即首位不能为0
    """

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-18 21:34:59 | 显示全部楼层
import re
func = lambda x: bool(re.search('(^xyz)|[^.]xyz', x))

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-11-18 21:36:17 | 显示全部楼层
def func(str1):
    if len(str1) < 3:
        return False
    count = 0
    while count < len(str1) - 2:
        if str1[count] != 'x':
            count += 1
        else:
            if count == 0:
                if str1[count+1] == 'y' and str1[count+2] == 'z':
                    return True
                else:
                    count += 1
            else:
                if str1[count+1] == 'y' and str1[count+2] == 'z' and str1[count-1] != '.':
                    return True
                else:
                    count += 1
    return False

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-18 21:40:28 | 显示全部楼层
import re

def select(st1):
    if re.search('xyz',st1):
        if not re.search('.xyz',st1):
            return True
    return False
if __name__=='__main__':
    st1=input('请输入字符串:')
    flags=select(st1)
    print(flags)

点评

输入 xyz.xyz 答案有误,应为 True  发表于 2019-11-20 21:05
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-18 21:42:22 | 显示全部楼层
本帖最后由 angtn 于 2019-11-18 22:08 编辑

翻了翻楼上突然发现'abc.xyzxyz',赶紧把代码改了下,希望这次是对的。
def echo(ss):
        while '.xyz' in ss:
                ss = ss.replace('.xyz','')
        if 'xyz' in ss:
                return True
        return False

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-18 21:44:36 | 显示全部楼层
写得不 Elegant,不管了,先提交
def f277(s):
    n = len(s)
    if n < 3:
        return False

    if s[:3] == "xyz":
        return True
    
    for i in range(n-3):
        if s[i] != '.' and s[i+1:i+4] == "xyz":
            return True
    return False

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-18 22:37:01 | 显示全部楼层
本帖最后由 peicd 于 2019-11-19 13:12 编辑
def abc(s):
    return 'xyz' in s.replace('.xyz','@')

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-18 22:39:55 | 显示全部楼层
def solve(s):
    while '.xyz' in s:
        s = s.replace('.xyz', ' ')
    return 'xyz' in s

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-18 22:41:35 | 显示全部楼层
def f(x):
    if 'xyz' in x:
        n=x.index('xyz')
        if '.' not in x[:n]:
            return True
    return False
x0=f('abcxyz')
x1=f('abc.xyz')
x2=f('xyz.abc')
print(x0,x1,x2)

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-18 22:48:03 | 显示全部楼层
我先理解一下题意思。题目是:
给定一个字符串 s,如果 'xyz' 在 s 中出现过,并且 'xyz' 前面没有 '.' 符号,则返回 True,否则返回 False
我直接奔着True去,大前提条件是xyz必须出现,对吧
然后是子字符串xyz前面没有"."符号,这里我就奇怪了,究竟是全部的xyz字符串满足,还是只要有一个满足就可,直到我看到
输入:'abc.xyzxyz'
输出:False
预期结果:True
懂了,最后的结果就是:一个字符串,只要包含有一个xyz前面不是"."即可,那么用正则直接search即可。
或者按照分析思路来,先查有没有xyz,再判断".xyz"和“xyz” 的计数相不相等就可以判断了
我贴一下代码
import re


while 1:
    s = input("测试输入字符串,输入q停止测试:")
    if s == "q":
        break

    def f1(s):
        if s[:3] == "xyz":
            return True
        pattern = re.compile(r"[^.]xyz")
        try:
            if pattern.search(s).group(0):
                return True
        except AttributeError:
            return False

    print(f1(s))

    def f2(s):
        if s[:3] == "xyz":
            return True
        if "xyz" not in s:
            return False
        else:
            if s.count("xyz") == s.count(".xyz"):
                return False
            else:
                return True

    print(f2(s))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 09:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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