鱼C论坛

 找回密码
 立即注册
查看: 8778|回复: 38

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

[复制链接]
发表于 2019-11-16 21:13:31 | 显示全部楼层 |阅读模式

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

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

x
今天的题目:


判断一个字符串是不是回文联(忽略除小写字母和数字的字符

示例 1:

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

输入:'123a;321'
输出:True
解释:; 不是小写字母或数字,所以我们将它忽略。
示例 3:

输入:'1232A21'
输出:False
解释:虽然 A 被忽略了,但是剩下的字符 123221 并不是回文联。


欢迎大家一起答题!
最佳答案
2019-11-16 22:12:09
  1. def func(str1):
  2.     count1 = 0
  3.     count2 = len(str1) - 1
  4.     while count1 < count2:
  5.         if str1[count1].islower() == False and str1[count1].isdecimal() == False:
  6.             count1 += 1
  7.             continue
  8.         if str1[count2].islower() == False and str1[count2].isdecimal() == False:
  9.             count2 -= 1
  10.             continue
  11.         if not str1[count1] == str1[count2]:
  12.             return False
  13.         else:
  14.             count1 += 1
  15.             count2 -= 1
  16.     return True
复制代码

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2019-11-16 21:24:24 | 显示全部楼层
  1. def fun(string):
  2.     s1 = [chr(i) for i in range(97, 123)] + [chr(i) for i in range(48, 58)]
  3.     s2 = [i for i in string if i in s1]
  4.     return True if s2 == s2[::-1] else False
复制代码

评分

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

查看全部评分

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

使用道具 举报

 楼主| 发表于 2019-11-16 21:27:45 | 显示全部楼层

恭喜通过!

执行用时:195 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-16 21:51:27 | 显示全部楼层
来啦
  1. def solve(s):
  2.     f = lambda x:x if (x >= '0' and x <= '9') or (x >= 'a' and x <= 'z') else ''
  3.     s = ''.join(map(f, s))
  4.     for i in range(n//2):
  5.         if s[i] != s[n-i-1]:
  6.             return False
  7.     return True
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-16 21:53:01 | 显示全部楼层

变量 n 哪来的?

NameError: name 'n' is not defined
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-16 21:54:10 | 显示全部楼层
  1. def check(string):
  2.         for each in string:
  3.                 if not each.isalnum():
  4.                         string = string.replace(each, '')
  5.         l = len(string)//2
  6.         for index in range(l):
  7.                 if not string[index] == string[-index-1]:
  8.                         return False
  9.         else:
  10.                 return True
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-16 21:56:14 | 显示全部楼层

解答错误

输入:'123DFVGHBNJaaDFGHJK#$%^&*(321'
输出:False
预期结果:True
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-16 22:02:17 | 显示全部楼层
想到两种方法,但不知道孰优孰劣,从时间、空间两个方面,可以劳烦楼主两个函数都测试一下吗?
  1. import re
  2. def solve(string):
  3.     cop = re.compile(r'([0-9]|[a-z])+?')
  4.     a = cop.findall(string)
  5.     b = a[:]
  6.     b.reverse()
  7.     #print('调试',a)
  8.     #print('调试',b)
  9.     return (a == b)

  10. def solve_beta(string):
  11.     cop = re.compile(r'([0-9]|[a-z])+?')
  12.     a = cop.findall(string)
  13.     i = 0
  14.     j = len(a)-1
  15.     while i < j:
  16.         if a[i] != a[j]:
  17.             return False
  18.         i += 1
  19.         j -= 1
  20.     return True

  21. if __name__ == '__main__':
  22.     print('示例1 True 输出:',solve_beta('123321'))
  23.     print('示例2 True 输出:',solve_beta('123a;321'))
  24.     print('示例3 False 输出:',solve_beta('1232A21'))
复制代码

两个函数相互独立,没有交流,都能解题。

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-11-16 22:02:42 | 显示全部楼层
zltzlt 发表于 2019-11-16 21:56
解答错误

输入:'123DFVGHBNJaaDFGHJK#$%^&*(321'

大写字母也不要是么。。。。

  1. def check(string):
  2.         for each in string:
  3.                 if not each.isalnum() or each.isupper():
  4.                         string = string.replace(each, '')
  5.         l = len(string)//2
  6.         for index in range(l):
  7.                 if not string[index] == string[-index-1]:
  8.                         return False
  9.         else:
  10.                 return True
复制代码

评分

参与人数 1贡献 +1 收起 理由
zltzlt + 1 恭喜通过!执行用时:364 ms

查看全部评分

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

使用道具 举报

发表于 2019-11-16 22:12:09 | 显示全部楼层    本楼为最佳答案   
  1. def func(str1):
  2.     count1 = 0
  3.     count2 = len(str1) - 1
  4.     while count1 < count2:
  5.         if str1[count1].islower() == False and str1[count1].isdecimal() == False:
  6.             count1 += 1
  7.             continue
  8.         if str1[count2].islower() == False and str1[count2].isdecimal() == False:
  9.             count2 -= 1
  10.             continue
  11.         if not str1[count1] == str1[count2]:
  12.             return False
  13.         else:
  14.             count1 += 1
  15.             count2 -= 1
  16.     return True
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-11-16 22:23:48 | 显示全部楼层
本帖最后由 peicd 于 2019-11-16 22:32 编辑
  1. def abc(a):
  2.     b=[i for i in a if i.islower()or i.isdigit()]
  3.     for i in range(len(b)//2):
  4.         if b[i]!=b[-i-1]:
  5.             return False
  6.     return True
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-11-16 23:02:09 | 显示全部楼层
zltzlt 发表于 2019-11-16 21:53
变量 n 哪来的?

NameError: name 'n' is not defined

可能是变魔法出来的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-16 23:07:56 | 显示全部楼层

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

使用道具 举报

发表于 2019-11-16 23:15:54 | 显示全部楼层

Ta 可就差一行。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-17 00:10:49 | 显示全部楼层
zltzlt 发表于 2019-11-16 21:53
变量 n 哪来的?

NameError: name 'n' is not defined

哈哈哈我多删了点
  1. def solve(s):
  2.     f = lambda x:x if (x >= '0' and x <= '9') or (x >= 'a' and x <= 'z') else ''
  3.     s = ''.join(map(f, s))
  4.     n = len(s)
  5.     for i in range(n//2):
  6.         if s[i] != s[n-i-1]:
  7.             return False
  8.     return True
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-17 00:40:55 | 显示全部楼层
本帖最后由 Stubborn 于 2019-11-17 00:57 编辑

不好玩的题目

  1. def fun275(s):
  2.     string = "qwertyuiopasdfghjklzxcvbnm0123456789"
  3.     new = ''
  4.     for i in s: new += i if i in string else ''
  5.     c = range(len(new) - 1, 1, -1)
  6.     flag = True
  7.     length = range((len(new) >> 1) + 1)
  8.     for a, b in zip(length, c): flag = False if new[a] != new[b] else True
  9.     return flag

  10. def fun275(s):
  11.     new = ''
  12.     for i in s: new += i if 47 < ord(i) < 58 or 95 < ord(i) < 123 else ''
  13.     length = range((len(new) >> 1) + 1)
  14.     c = range(len(new) - 1, 0, -1)
  15.     for a, b in zip(length, c):
  16.         if new[a] != new[b]:
  17.             return False
  18.     return True
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-17 01:01:29 | 显示全部楼层

哈哈哈哈哈哈 键盘序字母表可还行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-17 01:02:46 | 显示全部楼层
Unicorn# 发表于 2019-11-17 01:01
哈哈哈哈哈哈 键盘序字母表可还行

abce..xyz 难打一点
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-17 07:45:07 | 显示全部楼层
  1. import re

  2. def kao(s):
  3.     s = ''.join(re.findall('\d', s))
  4.     l = len(s)
  5.     return (s[0:int(l/2)]==''.join(reversed(s[int(l/2):])))

  6. s = '123DFVGHB4NJaaDFGHJK#$%^&*(43a21'
  7. print(kao(s))
  8. s = '123DFVGHBNJaaDFGHJK#$%^&*(43a21'
  9. print(kao(s))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-17 08:35:31 | 显示全部楼层
请问版主,我把这个每日一题订阅了,但是从哪才能找到呢,我才刚开始做,每次都要搜索 每日一题 xx,找不到订阅的地方
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-13 15:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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