函数为不同的参数返回相同的值

时间:2017-07-12 16:48:58

标签: python python-3.x function return-value

我是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 个答案:

答案 0 :(得分:3)

使用if语句,您需要指定 x等于每个数字 - 例如if x == 0:

目前,您正在测试数字本身的真值,而与您指定的x无关。要看到这一点,请尝试:

if 1:
    print('Monday')
Monday

您可能会发现,在Python中,0计算结果为False而其他整数返回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'

答案 1 :(得分: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))

答案 2 :(得分: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]

答案 3 :(得分:-1)

您忘记将函数(x)中的局部变量范围与比较值进行比较。 “if 0”将是布尔比较而不是您想要的int比较。用“if x == 0”等替换你的语句将解决你的问题。如果你把日期放在一个列表中并返回列表的索引就更容易了。

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