2017-07-17 116 views
-1

所以我试图让这个搜索功能显示名字输入时人的星座。我用4个名字做了手动方式,我知道有一种方法可以用我已经(但不使用)的字典压缩代码,但我不记得了。如何压缩python代码?


Horoscopes = { 
    "A": "Scorpio", 
    "B": "Gemini", 
    "J": "Sagittarius", 
    "P": "Gemini", 
    } 

def horoscope(name): 
    if name == "A" or name == "a": 
     print ("Hello " + name + ", you are a Scorpio!") 
     print("Welcome to the Horoscope Search!") 
     name = input("What is your name? ") 
     horoscope(name) 
    elif name == "B" or name == "b": 
     print ("Hello " + name + ", you are a Gemini!") 
     print("Welcome to the Horoscope Search!") 
     name = input("What is your name? ") 
     horoscope(name) 
    elif name == "J" or name == "j": 
     print ("Hello " + name + ", you are a Sagittarius!") 
     print("Welcome to the Horoscope Search!") 
     name = input("What is your name? ") 
     horoscope(name) 
    elif name == "P" or name == "p": 
     print ("Hello " + name + ", you are a Gemini!") 
     print("Welcome to the Horoscope Search!") 
     name = input("What is your name? ") 
     horoscope(name) 
    else: 
     print ("Sorry " + name + ", you are not registered in our 
     system!") 
     print("Welcome to the Horoscope Search!") 
     name = input("What is your name? ") 
     horoscope(name) 

print("Welcome to the Horoscope Search!") 
name = input("What is your name? ") 
horoscope(name) 
+1

你能澄清你的问题,你的目标是什么,你的问题是不完全清楚在什么条件你正在寻找成果。 –

+0

嗨,我正在寻找将整个功能块压缩成只有一个“如果”和“其他”。因此,如果名称出现在词典中,那么if可能会是这样的,那么该名称将与星座运算的值一起打印 –

+1

请参阅@RacezeQ做了什么。压缩的最佳方法是在字典中查找名称并返回与该名称关联的值。 –

回答

1

你应该定义你的字典用钥匙从小写字母开始,这样你就可以分析所有的答案,以降低字母和这样比较吧:

Horoscopes = { 
    "a": "Scorpio", 
    "b": "Gemini", 
    "j": "Sagittarius", 
    "p": "Gemini", 
} 

def horoscope(name): 
    if name.lower() in Horoscopes: 
     print("Hello " + name + " you are a " + Horoscopes[name.lower()] + "!") 
    else: 
     print("Sorry " + name + ", you are not registered in our system!") 
+0

如何编写“如果”,以便如果名称未出现在字典中,则代码将运行其他 –

+0

如果在星座中没有name.lower(): print(“Sorry”+ name +“,you “) else: print(”Hello“+ name +”you is a“+ Horoscopes [name.lower()] +”!“) – RaczeQ

0

这东西可实现像这样:

horoscopes = { 
    "Angelina": "Scorpio", 
    "Bernice": "Gemini", 
    "Jessica": "Sagittarius", 
    "Peniel": "Gemini", 
    } 

print("Welcome to the Horoscope Search!") 
name = input("What is your name? ") 

if name in horoscopes: # If name is a key in horoscopes dict 
    print("Your Horoscope is {}!".format(horoscopes[name])) 

请注意这是一个大小写敏感的检查星座中给定的名字,即我如果某个名字被输入为'angelina',它将不会与字典键'Angelina'相匹配。考虑到这一点,如果字典键被称为是在情况下,人们可能会使用字符串方法.lower()

name = input("What is your name? ").lower() 

这样,无论怎么输入名称,仍然会有匹配。

如果你希望用户被提示,直到一个有效的名字被输入,则:

horoscopes = { 
    "angelina": "Scorpio", 
    "bernice": "Gemini", 
    "jessica": "Sagittarius", 
    "peniel": "Gemini", 
    } 

print("Welcome to the Horoscope Search!") 

while True: # Until a name is matched to horoscopes 
    name = input("What is your name? ").lower() 

    if name in horoscopes: # If name is a key in horoscopes dict 
     print("Your Horoscope is {}!".format(horoscopes[name])) 
     break # A valid name has been entered, break from loop 
    else: 
     print("Please enter a valid name!")