Python 函数没有返回正确的值

Python 函数没有返回正确的值,python,function,python-3.6,filepath,Python,Function,Python 3.6,Filepath,我对函数有问题,也没有返回正确的值。函数根据用户选择返回文件的路径。我已经检查了选项输入,但无论输入什么选项,都只返回一个值 def pick_sql_version(): # might be redundant sql_year = ['2008', '2014', '2016'] for i, val in enumerate(sql_year): print(i + 1, " SQL Server Management Studio ", val)

我对函数有问题,也没有返回正确的值。函数根据用户选择返回文件的路径。我已经检查了选项输入,但无论输入什么选项,都只返回一个值

def pick_sql_version():  # might be redundant
    sql_year = ['2008', '2014', '2016']
    for i, val in enumerate(sql_year):
        print(i + 1, " SQL Server Management Studio ", val)

    sql_version = input("Pick the SSMS version: ")

    # depending on the sql version path might vary
    if sql_version == 1:  # SSMS 2008
        path = ''  # which value to use?
    elif sql_version == 2:  # SSMS 2014
        print (sql_version)
        path = '"C:/Program Files (x86)/Microsoft SQL Server/120/Tools/Binn/ManagementStudio/Ssms.exe"'
        print (path)
    else:  # SSMS 2016
        print(sql_version)
        path = '"C:/Program Files (x86)/Microsoft SQL Server/130/Tools/Binn/ManagementStudio/Ssms.exe"'
        print(path)

    return path
使用
input(“选择SSMS版本:”)
您正在以字符串形式读取输入,这意味着如果您输入
1
,您将获得
'1'
,如果您输入
2
,您将获得
'2'

您应该通过检查输入是否为
'1'
'2'
来解决此问题(您也可以将输入转换为
int
,正如一些评论中所建议的,但我认为这只会给您带来问题:例如,如果您输入的内容无法转换为
int
,则会引发错误):

使用
input(“选择SSMS版本:”)
您正在以字符串形式读取输入,这意味着如果您输入
1
,您将获得
'1'
,如果您输入
2
,您将获得
'2'

您应该通过检查输入是否为
'1'
'2'
来解决此问题(您也可以将输入转换为
int
,正如一些评论中所建议的,但我认为这只会给您带来问题:例如,如果您输入的内容无法转换为
int
,则会引发错误):


不得不为你写另一个版本。 使用
字典的强大功能
可以使代码更具可读性

让我们将键
“1”
与值
“120”
相连,将键
“2”
与值
“130”
相连。我们使用
str.format()
将它们插入到路径中

最后,通过使用
dictionary.get()
我们可以传递一个默认值,如果用户输入无效(不是
1
2
),它将使用值120

def pick_sql_version():  # might be redundant

    # create an easy list to pick from
    sql_year = ['2008', '2014', '2016']
    for i, val in enumerate(sql_year, start= 1):
        print("{} SQL Server Management Studio {}".format(i, val))
    sql_version = input("Pick the SSMS version: ")

    # depending on the sql version path might vary
    version_d = {
        '1': '120',
        '2': '130'
    }

    # If invalid path is chosen fall back to default (120)
    t='C:/Program Files (x86)/Microsoft SQL Server/{}/Tools/Binn/ManagementStudio/Ssms.exe'
    path = t.format(version_d.get(sql_version, '120'))

    return path

不得不为你写另一个版本。 使用
字典的强大功能
可以使代码更具可读性

让我们将键
“1”
与值
“120”
相连,将键
“2”
与值
“130”
相连。我们使用
str.format()
将它们插入到路径中

最后,通过使用
dictionary.get()
我们可以传递一个默认值,如果用户输入无效(不是
1
2
),它将使用值120

def pick_sql_version():  # might be redundant

    # create an easy list to pick from
    sql_year = ['2008', '2014', '2016']
    for i, val in enumerate(sql_year, start= 1):
        print("{} SQL Server Management Studio {}".format(i, val))
    sql_version = input("Pick the SSMS version: ")

    # depending on the sql version path might vary
    version_d = {
        '1': '120',
        '2': '130'
    }

    # If invalid path is chosen fall back to default (120)
    t='C:/Program Files (x86)/Microsoft SQL Server/{}/Tools/Binn/ManagementStudio/Ssms.exe'
    path = t.format(version_d.get(sql_version, '120'))

    return path

可能重复使用
int(sql_版本)==1
等。输入被读取为字符串。不要使用
int
;这里没有使用整数的任何属性,所以只需比较字符串即可<代码>如果sql\u版本==“1”:,等等@chepner谢谢,我犯了一个愚蠢的错误。可能重复使用
int(sql\u版本)==1
等等。输入被读取为字符串。不要使用
int
;这里没有使用整数的任何属性,所以只需比较字符串即可<代码>如果sql_version==“1”:,等等@chepner谢谢,我犯了个愚蠢的错误。是的,我已经解决了。这是我的疏忽。谢谢。1个映射到2008年,2个映射到2014年,等等,这并不是很直观。你可能想与“2008”、“2014”等进行比较。@BrianHowell这些输入来自一个事先打印的菜单;它并不一定是直观的,因为标签是显式显示的。@chepner哦,是的,我错过了菜单。这样一来,使用我建议的方法可能就不那么直观了。是的,我已经解决了。这是我的疏忽。谢谢。1个映射到2008年,2个映射到2014年,等等,这并不是很直观。你可能想与“2008”、“2014”等进行比较。@BrianHowell这些输入来自一个事先打印的菜单;它并不一定是直观的,因为标签是显式显示的。@chepner哦,是的,我错过了菜单。因此,使用我建议的方法可能不那么直观。谢谢,我将查看
词典
。只是一个小问题:为什么路径中有反斜杠?@YuryStanev,因为format()的路径太长了。限制为80个标志比较容易。我翻拍的是slighlty。也许这更清楚。谢谢,我会查字典。只是一个小问题:为什么路径中有反斜杠?@YuryStanev,因为format()的路径太长了。限制为80个标志比较容易。我翻拍的是slighlty。也许这更清楚。