2017-07-12 89 views
0

我对Python很陌生(并且使用Python 3)。道歉---我知道我必须犯一个非常基本的错误。函数为不同的参数返回相同的值

这里是错误的结构,然后我就举个例子:我写了一个函数func(x)。为了测试它做了“正确”的事情,我插入了值x1,即print(func(x1))。输出是y1,这是正确的。然后我试了print(func(x2))。这又给了我y1而不是正确的y2。与其他值x类似。起初我认为这是一个具体功能的错误,但后来我遇到了与其他功能类似的问题。我是否犯了所有功能共同的错误?

下面是一个例子;我已经尝试了这个(和其他功能)几种不同的变化,仍然存在这个问题。如果这会有所帮助,我可以举出其他例子。

def num_to_day(x): 
    if 0: 
     return "Sunday" 
    elif 1: 
     return "Monday" 
    elif 2: 
     return "Tuesday" 
    elif 3: 
     return "Wednesday" 
    elif 4: 
     return "Thursday" 
    elif 5: 
     return "Friday" 
    elif 6: 
     return "Saturday" 
    else: 
     return "Not Valid" 
print(num_to_day(5)) 
+4

你必须测试你的条件'if',就像这样'if x == 0:.. elif x == 1 ..'。 – randomir

回答

3

有了您的if语句,你需要指定x等于每个号码 - 例如,if x == 0:

目前,您正在测试一个数字本身的真值,没有关系你指定的内容x。看到这一点,尝试:

if 1: 
    print('Monday') 
Monday 

您可能会发现它有用知道,在Python,0计算结果为假,而其它整数返回True

print([bool(num) for num in range(7)]) 
[False, True, True, True, True, True, True] 

bool测试其参数的真值。

;最后,许多的一个替代方案是从字典查找您的工作日。 .get允许您指定在抛出错误时返回的值。

def num_to_day(x): 
    days = { 
     0 : 'Sunday', 
     1 : 'Monday', 
     2 : 'Tuesday', 
     3 : 'Wednesday', 
     4 : 'Thursday', 
     5 : 'Friday', 
     6 : 'Saturday' 
     } 
    return days.get(x, 'Not Valid') 

num_to_day(0) 
Out[54]: 'Sunday' 

num_to_day(10) 
Out[55]: 'Not Valid' 
+0

工作!谢谢! (它不会让我接受12分钟的答案) – Amanda

+1

您也可能希望使用列表进行此比较。 ex。 '['星期日','星期一','星期二','星期三','星期四','星期五','星期六'] [day_num]' – doratheexplorer0911

+0

是的,我尝试了各种版本......但我认为发布一个是最容易找出我正在犯的错误...我知道它必须是基本的... – Amanda

0

您使用它在所有传递参数给你的函数,然后。为了使工作,你必须实际上比较x所有这些数字,简单的if 0:相当于if False:,而不是if x == 0:

无论如何,这个elif的级联是不是代码的主要例子。一个更好的解决方案是使用列表或字典:

def num_to_day(x): 
    days_of_week = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ] 
    return days_of_week[x] 
2

你没有在你的函数内部使用你的参数。

def num_to_day(x): 
    if x == 0: # <-- Now x gets evaluated 
     return "Sunday" 
    elif x == 1: 
     return "Monday" 
    elif x == 2: 
     return "Tuesday" 
    elif x == 3: 
     return "Wednesday" 
    elif x == 4: 
     return "Thursday" 
    elif x == 5: 
     return "Friday" 
    elif x == 6: 
     return "Saturday" 
    else: 
     return "Not Valid" 
print(num_to_day(5)) 
-1

您忘记将函数(x)中的局部变量作用域与比较值进行比较。 “如果0”将是布尔比较而不是你想要的整型比较。用“if x == 0”等替换你的语句。将解决你的问题。如果将日期放在列表中并返回列表的索引,另一种方式会更容易。

def num_to_day(x): 
    dates = ['sunday','monday',tuesday','wednesday'] 
    return dates[x-1] 
相关问题