我是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))
答案 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]