Я получаю эту ошибку при использовании словаря для вызова методов (Python) - PullRequest
0 голосов
/ 22 апреля 2019

Что я хочу сделать, так это то, что в зависимости от числа, которое пользователь помещает в программу, открывает папку в браузере или закрывает словарь, в котором каждое число выполняет функцию.Проблема в том, что он возвращает none во всех случаях, а не return или функцию.

При вводе 0 программа должна быть закрыта.

При вводе 1, .mp3 окон по умолчанию.Необходимо открыть 7.

При вводе 2 следует открывать только музыкальную папку по умолчанию.

При вводе 3 просто поставить «три» на экране.

И, наконец,введите 666, что Google Chrome был открыт с URL-адрес, который я поставил.

В случае ввода другого номера следует оставить «Недействительный номер»

 import webbrowser
 import subprocess
 import sys
 opened = True

   def  one():

      print("Opening explorer.exe")
      #subprocess.Popen(r'explorer /select,"C:\Users\reciclo"')
      subprocess.call("explorer C:\\Users\\Public\\Music\\Sample 
      Music\Kalimba.mp3", shell=True)
      return "opened"
   def zero():

      print("Exit the program")
      opened = False
      return "Exit"
   def two():

      subprocess.call("explorer C:\\Users\\Public\\Music\\Sample Music", 
      shell=True)

      return "two"
  def three():


      return "three"
  def demon():

      demon_url = 'https://piv.pivpiv.dk/'
      chrome_path = 'C:/Program Files 
      (x86)/Google/Chrome/Application/chrome.exe %s'
      webbrowser.get(chrome_path).open(demon_url)

      return "invoked"
  def switch_demo(var):

  switcher = {
            0: zero,
            1: one,
            2: two,
            3: three,

           666: demon,

  }
   var = switcher.get(var, "Invalid num")
   while opened:
 if opened == True:
  var = int(input("enter a number between 1 and 9999999999 "))
  print(switch_demo(var)))

 elif opened== False:
  print("Goout")
  sys.exit()

Ответы [ 3 ]

0 голосов
/ 22 апреля 2019

вы забыли вернуть значение из switch_demo(), проверьте код ниже:

 def switch_demo(var):

    switcher = {
            0: zero,
            1: one,
            2: two,
            3: three,

           666: demon,

    }
    return switcher.get(var, "Invalid num")


while opened:
    if opened == True:
        var = int(input("enter a number between 1 and 9999999999 "))
        print(switch_demo(var)))

    elif opened== False:

print("Goout")
sys.exit()
0 голосов
/ 22 апреля 2019

@ Махмуд Эльшахат прав, что вы должны вернуть функцию из switch_demo Также измените print(switch_demo(var))) на print(switch_demo(var)()). Это может быть переписано так, чтобы иметь больше смысла:

var = "something"
function = switch_demo(var)
print(function())

Это на самом деле вызовет function, а также распечатает все, что вернет, если это то, что вы хотели.

0 голосов
/ 22 апреля 2019

Значение словаря как вызываемая функция:

переключатель [0] ()

def switch_demo(var):
    switcher = {
        0: zero,
        1: one,
        2: two,
        3: three,

        666: demon,
    }
    #var = switcher.get(var, "Invalid num")
    switcher[int(var)]() # exec function

-

def switch_demo(var):
    switcher = {
        0: zero,
        1: one,
        2: two,
        3: three,

        666: demon,
    }
    #var = switcher.get(var, "Invalid num")
    return (switcher[int(var)]())

while opened:

    if opened == True:
        var = int(input("enter a number between 1 and 9999999999 "))
        print (switch_demo(var))

    elif opened == False:
        print("Goout")
...