Python 如何检查用户输入的字符在字符列表中是否相同?
我知道我的问题很模糊。我是python新手,我正在尝试编写一个程序,通过检查两个人名字中的字符是否出现在“真爱”中来计算他们之间的兼容性 例如: 扎克·埃夫隆 艾玛·沃森 检查用户提供的姓名中是否有“真爱”字样。然后将它们相加并给出一个百分比。它将首先检查“真”并给出一个数字“x”,然后同样给出“爱”并给出另一个数字“y”,然后将数字并排放置,形成一个整数xy% 我知道现在还不清楚,但我没有什么可失去的 这是我的代码,我知道它是坏的和有缺陷的:Python 如何检查用户输入的字符在字符列表中是否相同?,python,python-3.x,Python,Python 3.x,我知道我的问题很模糊。我是python新手,我正在尝试编写一个程序,通过检查两个人名字中的字符是否出现在“真爱”中来计算他们之间的兼容性 例如: 扎克·埃夫隆 艾玛·沃森 检查用户提供的姓名中是否有“真爱”字样。然后将它们相加并给出一个百分比。它将首先检查“真”并给出一个数字“x”,然后同样给出“爱”并给出另一个数字“y”,然后将数字并排放置,形成一个整数xy% 我知道现在还不清楚,但我没有什么可失去的 这是我的代码,我知道它是坏的和有缺陷的: def fname(f): return [
def fname(f):
return [char for char in f]
def sname(s):
return [char for char in s]
f = input("What is the first person's full name?: ").upper().replace(" ", "")
s = input("What is the second person's full name?: ").upper().replace(" ", "")
print("Hello, " + f + " and " + s + ".")
# Checking if whitespace is removed and made uppercase.
print(fname(f))
print(sname(s))
# listing the letters in True love
t = ["T", "R", "U", "E"]
l = ["L", "O", "V", "E"]
tl = t + l
print(tl)
我只想到这么多,我被困在这里了
任何帮助都将不胜感激,如果您对我正在尝试做的事情有任何疑问,请立即询问。您的代码可以做一些改进,但您需要: 首先,您要计算输入的字母在
tl
中的数量
count=0
for x in f+s:
if x in tl:
count+=1
或
然后,使用3的简单规则:
您对tl
中的所有字母都有100%的分数%算了吧
print((count * 100)/len(tl),'%')
除此之外,关于您的代码:
您可以使用list(f)
,list(s)
,而不是fname
和sname
函数;
tl
可能是列表(“真爱”)
设置交点可能是一种很好的方法:
>>> true_love = set("True Love".lower())
>>> len(
... (set(input("First name? ").lower())
... | set(input("Second name? ").lower())
... ) & true_love
... ) / len(true_love)
First name? Zac Efron
Second name? Emma Watson
0.625
其思想是,由于您正在寻找共同的字母,因此可以将每个字符串转换为一组字母。集合有一个内置运算符,用于查找它们共有的元素数(交点,即
&
运算符)。你建立一个集合,其中包含两个名字的并集(|
),你将它与“真爱”相交,然后比较这些集合的大小以得到一个百分比。具体来说,你“坚持”的是什么?缺陷是什么?嗨,谢谢你发布代码。正如斯科特·亨特所指出的,你需要非常具体。把问题分解成更小的问题。然后研究具体问题。你会惊讶于很多人都有类似的问题,所以我按照你的建议,对t和l都做了,因为我需要不同的数字来计算%。这不是真的乘以100,只是我把两个数字放在一起,形成一个新的数字。然而,我不知道如何把两者结合起来。计数1=0计数2=0对于f+s中的x:如果t中的x:计数1+=1如果l中的x:计数2+=1打印(计数1,计数2)我算出了!很高兴听到这个消息!
>>> true_love = set("True Love".lower())
>>> len(
... (set(input("First name? ").lower())
... | set(input("Second name? ").lower())
... ) & true_love
... ) / len(true_love)
First name? Zac Efron
Second name? Emma Watson
0.625