2017-05-18 5 views
1

데이터베이스에서 디스크 글로프 데이터를 가져 오는 ircbot을 만들고 있습니다. 가능한 명령을 사전에 저장하고 싶습니다.사용자 입력의 선택적 인수

function_dictionary = {"get PLAYERS best round from COURSE on YEAR" : 
get_best_round, 
"get PLAYERS THINGS from COURSE on YEAR" : get_things} 

플레이어, 코스 등은 목록에 저장됩니다. 모든 인수는 사용자가 제공하는 경우

PLAYERS = ["name1", "name2", "name3"] 
COURSES = ["course1", "course2", "course3"] 
THINGS = ["birdies", "pars", "bogeys"] 
YEARS = [2015, 2016, 2017] 

, 내가 인수를 교체하고 저장 원래 값을 수 있습니다

userinput = "get name1 best round from course1 on 2016" 
for p in PLAYERS: 
    if p in userinput: 
     player = p 
     userinput = userinput.replace(p, "PLAYERS") 
for c in COURSES: 
    if c in userinput: 
     course = c 
     userinput = userinput.replace(c, "COURSE") 
for y in YEARS: 
    if y in userinput: 
     year = y 
     userinput = userinput.replace(y, "YEAR") 

를 그리고 명령이 사전에있는 경우 다음 검색 :

for key in function_dictionary: 
    if key in userinput: 
     func_to_run = function_dictionary[key] 

func_to_run(player, course, year) 

방법 하나 이상의 인수가 사용자 입력에서 누락 된 경우이 작업을 수행합니까?

userinput1 = "get name1 best round" 

트리거해야

get_best_round("name1", course = "all", year = "all") 

userinput2 = "get best round from course1" 

트리거해야

get_best_round(name = "all", "course1", year = "all") 

01,239,

플레이어/과정/년이 후 원하는 값으로 기본 UserInput 사용자가 선택되지 않은 경우

get_things(name = "all", "birdies", course = "all", 2016) 

답변

1

일부 플래그를 사용할 수 있습니다. 예를 들어

:

PLAYERS_inserted = False 
for p in PLAYERS: 
    if p in userinput: 
     player = p 
     userinput = userinput.replace(p, "PLAYERS") 
     PLAYERS_inserted = True 

COURSES_inserted = False 
for c in COURSES: 
    if c in userinput: 
     course = c 
     userinput = userinput.replace(c, "COURSE") 
     COURSES_inserted = True 

YEARS_inserted = False 
for y in YEARS: 
    if y in userinput: 
     year = y 
     userinput = userinput.replace(y, "YEAR") 
     YEAR_inserted = True 

그리고, 당신은 단지 부울 값을 확인하고 적절한 방법을 호출합니다.

그러나이 방법은 사용하지 않을 것입니다. 충분한 실패 지점이있는 것 같습니다. 어쩌면 regex을 검색하거나 더 구체적인 인터페이스를 구성하십시오.

1

그냥 말할 절을 추가 트리거 갈까요 :

pset = False 
for p in PLAYERS: 
    if p in userinput: 
     pset=True 
     player = p 
     userinput = userinput.replace(p, "PLAYERS") 
if pset==False: 
    player= #value for any player 

을하고를 반복 과정과 해.