鱼C论坛

 找回密码
 立即注册
查看: 3844|回复: 22

[已解决]一道Python编程题求助

[复制链接]
发表于 2020-8-9 21:13:52 | 显示全部楼层 |阅读模式

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

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

x
等距图是一个没有重复字母,连续或不连续的单词。创建一个接受字符串并返回True或False的函数,具体取决于它是否为“等距图”。

Examples

solution("Algorism") ➞ True

solution("PasSword") ➞ False

solution("Consecutive") ➞ False




这个题,如果我想要取第一个字母,和后面所有的字母比较 是否相同 ,依次比下去,如果相同return false 不相同就比到最后,最后return true怎么实现?
最佳答案
2020-8-9 22:13:49
极品召唤兽 发表于 2020-8-9 22:04
...嗯..那就不对了呀..
你这样只是比较了第一个和其他的 是否相同
如果 第四个和第五个字母相同了 输出 ...


那改成这样就好了,原理和之前的差不多一样,但是是全部比较过去了:

不区分大小写:
  1. def solution(string):
  2.     for i in range(len(string)):
  3.         for j in string[i+1:]:
  4.             if string[i].lower() == j.lower():
  5.                 return False
  6.     return True

  7. print(solution("Algorism"))
  8. print(solution("PasSword"))
  9. print(solution("Consecutive"))
复制代码


区分大小写:
  1. def solution(string):
  2.     for i in range(len(string)):
  3.         for j in string[i+1:]:
  4.             if string[i] == j:
  5.                 return False
  6.     return True

  7. print(solution("Algorism"))
  8. print(solution("PasSword"))
  9. print(solution("Consecutive"))
复制代码

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

使用道具 举报

发表于 2020-8-9 21:15:25 | 显示全部楼层
  1. def func(str1):
  2.     return all([each == str1[0] for each in str1])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-9 21:19:12 | 显示全部楼层

额...好像不太好使....?
这个是什么意思能说说吗??
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-9 21:35:16 | 显示全部楼层
  1. def solution(string):
  2.     return True if len(set(string.lower())) == len(list(string.lower())) else False

  3. print(solution("Algorism"))
  4. print(solution("PasSword"))
  5. print(solution("Consecutive"))
复制代码


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

使用道具 举报

发表于 2020-8-9 21:36:12 | 显示全部楼层
本帖最后由 qiuyouzhi 于 2020-8-9 21:42 编辑
极品召唤兽 发表于 2020-8-9 21:19
额...好像不太好使....?
这个是什么意思能说说吗??


哇,dbq,我看错了...
给你重写一个:
  1. def func(str1):
  2.     return all([False if each == str1[0] else True for each in str1[1:]])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-9 21:38:13 | 显示全部楼层

这个是能满足题目要求  但是不是我想操作的那种过程
这个是直接set 然后比较长度...(标准答案)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-9 21:39:41 | 显示全部楼层
极品召唤兽 发表于 2020-8-9 21:38
这个是能满足题目要求  但是不是我想操作的那种过程
这个是直接set 然后比较长度...(标准答案)



嗷嗷 没看见你的要求,只看见原题了...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-9 21:42:16 | 显示全部楼层
极品召唤兽 发表于 2020-8-9 21:38
这个是能满足题目要求  但是不是我想操作的那种过程
这个是直接set 然后比较长度...(标准答案)


区分大小写:
  1. def solution(string):
  2.     for i in string[1:]:
  3.         if i == string[0]:
  4.             return False
  5.     return True

  6. print(solution("Algorism"))
  7. print(solution("PasSword"))
  8. print(solution("Consecutive"))
复制代码



不区分大小写:

  1. def solution(string):
  2.     for i in string[1:]:
  3.         if i.lower() == string[0].lower():
  4.             return False
  5.     return True

  6. print(solution("Algorism"))
  7. print(solution("PasSword"))
  8. print(solution("Consecutive"))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-9 21:43:54 | 显示全部楼层
qiuyouzhi 发表于 2020-8-9 21:36
哇,dbq,我看错了...
给你重写一个:

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

使用道具 举报

发表于 2020-8-9 21:45:01 | 显示全部楼层

?可以发下你的测试数据吗
我刚才又改了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-9 21:51:09 | 显示全部楼层

emmm感觉很对...就是没太看懂...能说说啥意思吗..
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-9 21:52:28 | 显示全部楼层
qiuyouzhi 发表于 2020-8-9 21:36
哇,dbq,我看错了...
给你重写一个:

这次可以了!!!能解释一下吗QWQ
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-9 21:54:06 | 显示全部楼层
极品召唤兽 发表于 2020-8-9 21:51
emmm感觉很对...就是没太看懂...能说说啥意思吗..


用 for 循环遍历除了你字符串 第一个字符之后的全部字符,依次和 字符串的第一个字符进行比较

只要相等一次,那么 if 条件就成立一次,就会执行 if 下面的代码块,返回 False 反之如果 for 循环全部执行完

都没有一个能使得 if 条件成立,那么就返回 True
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-9 21:57:14 | 显示全部楼层
极品召唤兽 发表于 2020-8-9 21:52
这次可以了!!!能解释一下吗QWQ

遍历字符串(除了第一个字符),如果其中一个字符和第一个字符相等,
则往结果列表里面添加一个False,否则添加一个True,最后判断列表里面是否都由True组成。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-9 22:04:22 | 显示全部楼层
Twilight6 发表于 2020-8-9 21:54
用 for 循环遍历除了你字符串 第一个字符之后的全部字符,依次和 字符串的第一个字符进行比较

只要 ...

...嗯..那就不对了呀..
你这样只是比较了第一个和其他的 是否相同
如果 第四个和第五个字母相同了 输出的依然是true
等距图是一个没有重复字母
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-9 22:07:55 | 显示全部楼层
qiuyouzhi 发表于 2020-8-9 21:57
遍历字符串(除了第一个字符),如果其中一个字符和第一个字符相等,
则往结果列表里面添加一个False, ...

额..那也是比较第一个和其他的是否相同的意思喽..
那如果第二个和第四个相同了怎么办
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-9 22:09:33 | 显示全部楼层
极品召唤兽 发表于 2020-8-9 22:04
...嗯..那就不对了呀..
你这样只是比较了第一个和其他的 是否相同
如果 第四个和第五个字母相同了 输出 ...

如果我想要取第一个字母,和后面所有的字母比较 是否相同 ,依次比下去


这是你自己改的啊...你只说第一个字母依次和后面的字母比较
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-9 22:13:49 | 显示全部楼层    本楼为最佳答案   
极品召唤兽 发表于 2020-8-9 22:04
...嗯..那就不对了呀..
你这样只是比较了第一个和其他的 是否相同
如果 第四个和第五个字母相同了 输出 ...


那改成这样就好了,原理和之前的差不多一样,但是是全部比较过去了:

不区分大小写:
  1. def solution(string):
  2.     for i in range(len(string)):
  3.         for j in string[i+1:]:
  4.             if string[i].lower() == j.lower():
  5.                 return False
  6.     return True

  7. print(solution("Algorism"))
  8. print(solution("PasSword"))
  9. print(solution("Consecutive"))
复制代码


区分大小写:
  1. def solution(string):
  2.     for i in range(len(string)):
  3.         for j in string[i+1:]:
  4.             if string[i] == j:
  5.                 return False
  6.     return True

  7. print(solution("Algorism"))
  8. print(solution("PasSword"))
  9. print(solution("Consecutive"))
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
极品召唤兽 + 1 + 1 感谢大佬~~

查看全部评分

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

使用道具 举报

 楼主| 发表于 2020-8-9 22:15:43 | 显示全部楼层
Twilight6 发表于 2020-8-9 22:09
这是你自己改的啊...你只说第一个字母依次和后面的字母比较

....omg咋是这么理解的...
我是想说一下这个过程 举了一个例子 题目要求还是要满足的呀..

如果我想要取第一个字母,和后面所有的字母比较 是否相同 ,依次比下去

就是第一个比完了 再拿第二个再比较 比到最后 全部相同了 才能是true..


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

使用道具 举报

发表于 2020-8-9 22:18:50 | 显示全部楼层
极品召唤兽 发表于 2020-8-9 22:15
....omg咋是这么理解的...
我是想说一下这个过程 举了一个例子 题目要求还是要满足的呀..
  1. def func(str1):
  2.     for i in range(len(str1)):
  3.         for each in str1[i+1:]:
  4.             if str1[i] == each:
  5.                 return False
  6.     return True
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
极品召唤兽 + 1 + 1 谢谢你QWQ加个好友呗

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 21:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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