一、题目
编写一个Python程序来判断两个给定的字符串是否是错位词。
如果两个字符串具有相同的字符,但顺序不同,则被认为是彼此的错位词。 例如,restful
和fluster
是错位词。
- 定义函数
are_anagrams()
,有两个参数:string1
和string2
。 - 在函数内,如果两个字符串是错位词,则返回
True
,否则返回False
。
二、输入与输出
输入:每一行输入一个字符串,共两行
输出:若两个字符串是错位词,则输出True,反之则输出False
三、样例
四、代码
def are_anagrams(string1, string2):
#定义函数are_anagrams
str1 = string1.lower().replace(" ", "")
str2 = string2.lower().replace(" ", "")
"""
string1.lower():这会将 string1 中的所有字符转换为小写。Python 中的字符串是不可变的,所以 lower() 方法返回一个新的字符串,其中所有的大写字符都被转换成了小写字符。原字符串 string1 不会被改变。
.replace(" ", ""):这个 replace 方法将新生成的小写字符串中的所有空格(" ")替换为空字符串(即删除空格)。同样,这也会返回一个新的字符串,原字符串(在这个例子中是 string1.lower() 的结果)不会被改变。
"""
if len(str1) != len(str2):
#判断两个字符串的长度是否相等
return False
char_counts1 = {c: str1.count(c) for c in set(str1)}
char_counts2 = {c: str2.count(c) for c in set(str2)}
"""
set(str1):将 str1 转换为一个集合(set),从而去除其中的重复字符,只保留唯一的字符。
{c: str1.count(c) for c in set(str1)}:这是一个字典推导式,它遍历 set(str1) 中的每个字符 c,并使用 str1.count(c) 来计算字符 c 在 str1 中出现的次数。然后,它将字符 c 作为键,出现的次数作为值,构建一个新的字典。
"""
if char_counts1 != char_counts2:
#判断两个字符串中出现的字符及相应的次数是否相等
return False
else:
if str1 == str2:
#判断两个字符串是否为同一字符串
return False
else:
return True
# 获取输入string1 和 string2
string1 = input()
string2 = input()
# 调用函数并打印结果
print(are_anagrams(string1, string2))
五、总结
基础知识:字符串中的 .lower()、.replace()、.count(),len()函数,set类型转换,
基本思想:字典推导式——{c: str1.count(c) for c in set(str1)}
小编以为这道题的逻辑思路较清晰,可能对于字典推导式的运用对于基础尚浅的友友们不太友好,友友们可以将之作为一个公式记住以备下次运用,也可以找一些课外资料好好学习一下字典这一板块。
同样,小编也希望友友们如果发现了代码中的漏洞,请多多指正;又或者,大家有新的思路或者更简洁、更方便的代码,多多指点小编。
微语:要么在读书,要么在旅行,灵魂和身体,总有一个在路上才好。
(因为最近重温了一下下《罗马假日》)