Python之“错位词”

一、题目

编写一个Python程序来判断两个给定的字符串是否是错位词。

如果两个字符串具有相同的字符,但顺序不同,则被认为是彼此的错位词。 例如,restfulfluster是错位词。

  • 定义函数are_anagrams(),有两个参数:string1string2
  • 在函数内,如果两个字符串是错位词,则返回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)}

        小编以为这道题的逻辑思路较清晰,可能对于字典推导式的运用对于基础尚浅的友友们不太友好,友友们可以将之作为一个公式记住以备下次运用,也可以找一些课外资料好好学习一下字典这一板块。

        同样,小编也希望友友们如果发现了代码中的漏洞,请多多指正;又或者,大家有新的思路或者更简洁、更方便的代码,多多指点小编。


微语:要么在读书,要么在旅行,灵魂和身体,总有一个在路上才好。

(因为最近重温了一下下《罗马假日》)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值