恢复预定义变量作为输入

Recover a predefined variable as input

我是编程新手,尤其是 python,我有一个必修项目要做。

我解释一下:我有一个对象列表(他们是人),每个对象都有特征,每个特征基于从 1 到 5 的等级(对于理解问题不重要)所以我有 6 个男人和预定义了6个女性作为对象,我根据她们的特点来比较,如果她们的特点相近的话,差不多就是绝配了。

所以我的目标是通过一个input输入我输入的人的名字,然后我的比较函数对他们进行比较。问题是,当我通过直接输入名称进行手动比较时,它可以工作,但是当我插入输入时,会发生错误。

我会让你发现下面的代码,以便更好地理解我在说什么,因为我不知道我是否很容易理解,但我很乐意回答这个问题,谢谢你:D

PS: 对不起我的拼写错误,我的语言不是很好

class Candidat: #Subject class (characteristics)
    def __init__(self,genre,humour,physique,intelligence,projet):
        self.genre=genre
        self.humour=humour
        self.physique=physique
        self.intelligence=intelligence
        self.projet=projet


def compare(Test1,Test2): #comparison function

#Match à 100% :

    if Test1.humour==Test2.humour and Test1.physique==Test2.physique and Test1.intelligence==Test2.intelligence and Test1.projet==Test2.projet:
        print("Match Parfait : 100%")
    elif Test1.humour!=Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet!=Test2.projet:
       print("Mauvais Match")

#Match à 75% :

    if Test1.humour!=Test2.humour and Test1.physique==Test2.physique and Test1.intelligence==Test2.intelligence and Test1.projet==Test2.projet:
        print("Match Parfait : 75%")
    elif Test1.humour!=Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet!=Test2.projet:
        print("Mauvais Match1")

    if Test1.humour==Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence==Test2.intelligence and Test1.projet==Test2.projet:
        print("Match Parfait : 75%")
    elif Test1.humour!=Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet!=Test2.projet:
        print("Mauvais Match2")

    if Test1.humour==Test2.humour and Test1.physique==Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet==Test2.projet:
        print("Match Parfait : 75%")
    elif Test1.humour!=Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet!=Test2.projet:
        print("Mauvais Match3")

    if Test1.humour==Test2.humour and Test1.physique==Test2.physique and Test1.intelligence==Test2.intelligence and Test1.projet!=Test2.projet:
        print("Match Parfait : 75%")
    elif Test1.humour!=Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet!=Test2.projet:
        print("Mauvais Match4")

#Match à 50% :

    if Test1.humour!=Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence==Test2.intelligence and Test1.projet==Test2.projet:
        print("Match Parfait : 50%")
    elif Test1.humour!=Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet!=Test2.projet:
        print("Mauvais Match01")

    if Test1.humour!=Test2.humour and Test1.physique==Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet==Test2.projet:
        print("Match Parfait : 50%")
    elif Test1.humour!=Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet!=Test2.projet:
        print("Mauvais Match02")

    if Test1.humour!=Test2.humour and Test1.physique==Test2.physique and Test1.intelligence==Test2.intelligence and Test1.projet!=Test2.projet:
        print("Match Parfait : 50%")
    elif Test1.humour!=Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet!=Test2.projet:
        print("Mauvais Match03")

    if Test1.humour==Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet==Test2.projet:
        print("Match Parfait : 50%")
    elif Test1.humour!=Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet!=Test2.projet:
        print("Mauvais Match04")

    if Test1.humour==Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence==Test2.intelligence and Test1.projet!=Test2.projet:
        print("Match Parfait : 50%")
    elif Test1.humour!=Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet!=Test2.projet:
        print("Mauvais Match602")

    if Test1.humour==Test2.humour and Test1.physique==Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet!=Test2.projet:
        print("Match Parfait : 50%")
    elif Test1.humour!=Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet!=Test2.projet:
        print("Mauvais Match103")


#Match à 25% :

    if Test1.humour!=Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet==Test2.projet:
        print("Match Parfait : 25%")
    elif Test1.humour!=Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet!=Test2.projet:
        print("Mauvais Match001")

    if Test1.humour!=Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence==Test2.intelligence and Test1.projet!=Test2.projet:
        print("Match Parfait : 25%")
    elif Test1.humour!=Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet!=Test2.projet:
        print("Mauvais Match002")

    if Test1.humour==Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet!=Test2.projet:
        print("Match Parfait : 25%")
    elif Test1.humour!=Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet!=Test2.projet:
        print("Mauvais Match003")

    if Test1.humour!=Test2.humour and Test1.physique==Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet!=Test2.projet:
        print("Match Parfait : 25%")
    elif Test1.humour!=Test2.humour and Test1.physique!=Test2.physique and Test1.intelligence!=Test2.intelligence and Test1.projet!=Test2.projet:
        print("Mauvais Match004")

例子

    Bryan=Candidat("homme",4,5,3,2)
    Adrien=Candidat("homme",4,3,2,3)
    Marin=Candidat("homme",5,2,4,3)
    Alcaraz=Candidat("homme",4,3,2,1)
    Allan=Candidat("homme",4,3,2,1)
    SebyDaddy=Candidat("homme",4,3,2,1)
    #--------------------------------#
    Anissa=Candidat("femme",0,5,2,0)
    Melanie=Candidat("femme",5,3,4,3)
    Dita=Candidat("femme",4,4,3,2)
    LeaMary=Candidat("femme",4,3,2,1)
    Maissane=Candidat("femme",4,3,2,1)
    Kellyn=Candidat("femme",4,3,2,1)

    Candidat=input("Homme : ")#input Man
    Candidat=input("Femme : ")#input Woman
    compare(Test1,Test2)#comparing

例如,如果我写 'compare(Bryan,Dita)',它直接是主题,它正在工作,但输入它不是:/

Bryan=Candidat("homme",4,5,3,2)
Adrien=Candidat("homme",4,3,2,3)
Marin=Candidat("homme",5,2,4,3)
Alcaraz=Candidat("homme",4,3,2,1)
Allan=Candidat("homme",4,3,2,1)
SebyDaddy=Candidat("homme",4,3,2,1)
#--------------------------------#
Anissa=Candidat("femme",0,5,2,0)
Melanie=Candidat("femme",5,3,4,3)
Dita=Candidat("femme",4,4,3,2)
LeaMary=Candidat("femme",4,3,2,1)
Maissane=Candidat("femme",4,3,2,1)
Kellyn=Candidat("femme",4,3,2,1)

Candidat=input("Homme : ")#input Man
Candidat=input("Femme : ")#input Woman
compare(Test1,Test2)#comparing

您正在尝试使用 input() 来确定要使用的变量名称。

没有好的办法。变量名称仅供程序员了解。然而,如果你想要的是 key-value 对——每个名字指向一个候选人——那么你可以使用一个 dict 来存储所有的东西,而不是许多单独的变量:

hommes = {
    'Bryan': Candidat("homme",4,5,3,2),
    'Adrien': Candidat("homme",4,3,2,3),
    'Marin': Candidat("homme",5,2,4,3),
    'Alcaraz': Candidat("homme",4,3,2,1),
    'Allan': Candidat("homme",4,3,2,1),
    'SebyDaddy': Candidat("homme",4,3,2,1),
}

femmes = {
    'Anissa': Candidat("femme",0,5,2,0),
    'Melanie': Candidat("femme",5,3,4,3),
    'Dita': Candidat("femme",4,4,3,2),
    'LeaMary': Candidat("femme",4,3,2,1),
    'Maissane': Candidat("femme",4,3,2,1),
    'Kellyn': Candidat("femme",4,3,2,1),
}

在这里,我们将字符串对应到dict中的候选,而不是使用一堆变量名。之前你会使用变量 Bryan,现在你会做 hommes['Bryan'] 来获得你之前声明的相同对象。

而且与变量名不同,我们可以使用用户输入来确定从中提取哪些变量名,因为 input() returns 一个字符串:

candidat_homme = hommes[input("Homme : ")]
candidat_femme = femmes[input("Femme : ")]
compare(candidat_homme, candidat_femme)

你需要使用eval功能

replace these lines
Candidat=input("Homme : ")#input Man
Candidat=input("Femme : ")#input Woman

to below lines 
man=eval(input("Homme : "))#input Man
woman=eval(input("Femme : "))#input Woman
compare(man,woman)

好的抱歉编辑:现在检查

您需要将您的人员存储在字典中:

hommes = {}
femmes = {}

Bryan=Candidat("homme",4,5,3,2)
Adrien=Candidat("homme",4,3,2,3)
Marin=Candidat("homme",5,2,4,3)
Alcaraz=Candidat("homme",4,3,2,1)
Allan=Candidat("homme",4,3,2,1)
SebyDaddy=Candidat("homme",4,3,2,1)

hommes[‘Bryan’] = Bryan
hommes[‘Adrien’] = Adrien
hommes[‘Marin’] = Marin
hommes[‘Alcaraz’] = Alcaraz
hommes[‘Allan’] = Allan
hommes[‘SebyDaddy’] = SebyDaddy

#--------------------------------#

Anissa=Candidat("femme",0,5,2,0)
Melanie=Candidat("femme",5,3,4,3)
Dita=Candidat("femme",4,4,3,2)
LeaMary=Candidat("femme",4,3,2,1)
Maissane=Candidat("femme",4,3,2,1)
Kellyn=Candidat("femme",4,3,2,1)

femmes[‘Anissa’] = Anissa
femmes[‘Melanie’] = Melanie
femmes[‘Dita’] = Dita
femmes[‘LeaMary’] = LeaMary
femmes[‘Maissane’] = Maissane
femmes[‘Kellyn’] = Kellyn

homme = input("Homme : ")  #input Man
femme = input("Femme : ")  #input Woman
compare(hommes[homme],femmes[femme]) #comparing


**Update:** I had skipped putting the rest of the people into their dicts. Fixed now.