使用 python 中的集合从两个字符串中找到共同的字母

Using sets in python to find common letters from two strings

我正在尝试编写一个程序,它基本上接受两个字符串,并从它们中找出常见的字母,并从中找出不常见的字母。它还必须在字符串中找到您可以找到的数字和特殊字符,并在打印命令中显示它们。

这是我的代码

from string import ascii_letters
import re
import itertools

def main():
    s1 = input("Please enter string 1: ")
    s2 = input("Please enter string 2: ")
    ch=""
    lowercase_letters = [i for i in s1 if i.islower() and i in s2]
    #print(lowercase_letters)
    uppercase_letters = [i for i in s1 if i.isupper() and i in s2]
    # print(uppercase_letters)
    new_str=''.join(uppercase_letters+lowercase_letters)
    print("The set consisting of the upper and lowercase letters that are contained in both strings is: ", new_str)

    # stringFunction(s1, s2)
    # k= str(longest_common_substring(s1,s2))
    # print(k)

def stringFunction(s1, s2):
    l1=list(''.join(s1.split()))
    l2=list(''.join(s2.split()))
    return [x for x in l1 if x in l2]

    print (stringFunction)

def longest_common_substring(s1, s2):
   set1 = set(s1[begin:end] for (begin, end) in
              itertools.combinations(range(len(s1)+1), 2))
   set2 = set(s2[begin:end] for (begin, end) in
              itertools.combinations(range(len(s2)+1), 2))
   common = set1.intersection(set2)
   return str(common)

main()

输出应该类似于

给你:

@EDIT1: 忘记在 python3.x 中 print 是一个函数。

@EDIT2:这不是原始请求的一部分。

@EDIT3:按照稍后的要求格式化输出(我不是打印格式方面的专家)。

@EDIT4:修改了输出以匹配修改后的请求

import string

def func(str1, str2):
    s1 = set(str1)
    s2 = set(str2)
    # requests are ambiguous "contained in both strings" can be either interpreted as intersections or union (i chose intersection)
    uni = s1.union(s2)
    letters_in_both_strings = [item for item in s1.intersection(s2) if item.isalpha()]
    non_letters_in_any_string = [item for item in uni if not item.isalpha()]
    all_letters = set(string.ascii_uppercase + string.ascii_lowercase)
    return letters_in_both_strings, all_letters.difference(uni), non_letters_in_any_string

str1 = input("Enter 1st string:")
str2 = input("Enter 2nd string:")
a, b, c = func(str1, str2)
print("|" + "".join(a) + "|\n|" + "".join(b) + "|\n|" + "".join(c) + "|\n")