看,我今天开始学习Python,但我陷入困境。 我正在解决一个非常简单的问题而且我完成了它但是有一个问题。
首先,让我讲述问题和约束。这是一个问题:
给定一个整数n
,执行以下条件操作:
n
为odd
,请打印Weird
。n
为even
,并且在2 to 5
的包含范围内,请打印Not Weird
n
为even
,并且在6 to 20
的包含范围内,请打印Weird
n
为even
且大于20
,请打印Not Weird
这是我的代码:
n = input("")
if n%2!=0 :
print ("Weird")
elif n%2==0 :
for n in range(3,4,5) :
print ("Not Weird")
elif n%2==0 :
for n in range(6,21) :
print ("Weird")
else :
if (n%2==0 & n>20) :
print ("Not Weird")
我编译了代码,一切都很好,但对于输入18
和20
我必须得Weird
作为输出,但我得到Not Weird
。任何人都可以帮助我吗?
答案 0 :(得分:0)
你有2个elif同样的条件它不应该。 改变它或删除一个elif
Retrofit2
最后其他也不需要
答案 1 :(得分:0)
你的范围问题(3,4,5)。列表(范围(3,4,5))是[3] ..可能不是你所期望的......范围是开始,停止,步骤。
你可以在[3,4,5]或范围(3,6)
中为n做答案 2 :(得分:0)
您的主要问题是您不断在n
循环中重新定义for
,因此在第一个for
循环后的每个条件语句中,n
不是什么最初是给了。
在n=18
和n=20
的两种情况下,第一个条件n%2!=0
为False,因此测试第二个条件。 n%2==0
为True
,因此执行for n in range(3,4,5):
循环。该循环的第一次(也是唯一的)迭代将n
设置为3并打印“Not Weird”。由于n
现在为3
,因此您的代码中没有剩余条件为True
,因此它们不会执行。
根据您的要求,以下内容会更简单:
def isweird(n):
if n%2 or n in range(6,21):
return 'Weird'
if n in range(2,6) or n > 20:
return 'Not Weird'
for n in range(23):
print(n, isweird(n))
输出:
0 None
1 Weird
2 Not Weird
3 Weird
4 Not Weird
5 Weird
6 Weird
7 Weird
8 Weird
9 Weird
10 Weird
11 Weird
12 Weird
13 Weird
14 Weird
15 Weird
16 Weird
17 Weird
18 Weird
19 Weird
20 Weird
21 Weird
22 Not Weird
答案 3 :(得分:0)
您提供的代码存在许多问题。
最明显的是你在if ... else链的两个分支中重复了相同的条件。第二个这样的条件,
elif n%2==0:
for n in range(6,21) :
永远不会执行。
此外,在这些分支中使用for循环是不正确的。那些应该是条件。当你想重复一个动作时,你使用一个循环,但是你有一个变量,你想问一个关于它的问题。这是一个“如果”:
elif n%2==0 :
if n in range(3,4,5) :
print ("Not Weird")
但这会导致下一个错误,即使用range
。如上所述,您将指定以3开头的数字范围,最多运行4(不包括),步长为5.这将是包含3的范围。
要指定从2到6的包含范围,您可以编写
elif n%2==0 :
if n in range(2,7):
print ("Not Weird")
范围底端包含范围,顶端独占。这一开始似乎违反直觉,但在使用零索引时,它通常是您想要的。例如,您希望range(10)有10个成员,并且从零开始,因此包含所有的十进制数字。 您也可以将其写为
elif n%2==0 :
if 2 <= n <= 6:
print ("Not Weird")
这将是我的偏好。
答案 4 :(得分:0)
所以,让我们逐行浏览你的代码,看看在输入18的情况下发生了什么:
if n%2!=0 :
print ("Weird")
18模数2等于0,因此不会达到此打印语句。
下一步:
elif n%2==0 :
for n in range(3,4,5) :
print ("Not Weird")
您好,这个匹配!因此,将执行for
语句。 您的if / elif / else链中的任何其他语句都不会达到值18,因为您在此处找到了匹配项。
然而,您不会看到您的期望,因为for
声明没有按照您的想法执行。您认为它会查看n
,并且在列表[3,4,5]中找到n
的值,将打印值Not Weird
。
这不是for
所做的。相反,n
将更改到该范围中的每个值,并且循环内的代码将在n
设置为该值的情况下执行。现在,您想知道为什么,如果是这种情况,您看不到Not Weird
打印三次?原因是range
是一个函数并且它不返回所提供数字的列表,它返回一组以(在您的示例中)3开头并以4结尾但仅以每5日结束的数字数。巧合的是,这只给range
只有1个值(值3),这就是Not Weird
只出现一次的原因。
以下是您的代码的更正和注释版本:
if n%2 != 0:
print ("Weird")
else:
#Don't need elif, there are only two cases odd, or not.
#But, inside this branch we have three possibilities.
if n in [2, 3, 4, 5]:
#I just enumerate here, instead of using range. You forgot about 2, BTW
print ("Not Weird")
elif n in range(6,21)
# Note the use of if (or elif), not for.
print ("Weird")
else:
print ("Not Weird")
答案 5 :(得分:0)
您是否专门要求使用for循环?如果没有,你可以试试这个!
n = int(input(""))
if n%2==1:
print("Weird")
elif n%2==0 and n in range(3, 6):
print("Not Weird")
elif n%2==0 and n in range(6, 21):
print("Weird")
elif n%2==0 and n>20:
print("Not Weird")
答案 6 :(得分:0)
n = int(input())
if n % 2 != 0:
print('Weird')
elif n % 2 == 0 and n in range(2, 6):
print('Not Weird')
elif n % 2 == 0 and n in range(5, 21):
print('Weird')
elif n % 2 == 0 and n > 20:
print('Not Weird')
这将起作用。...关键点包括在内。
答案 7 :(得分:0)
n = int(input().strip())
check = {True: "Not Weird", False: "Weird"}
print(check[
n % 2 == 0 and (
n in range(2, 6) or
n > 20)
])
这是最短的解决方案,不使用if。
答案 8 :(得分:0)
这是一个直接的解决方案:
n = int(input())
if n%2==0 and n not in range(6,21):
print("Not Weird")
else:
print("Weird")
答案 9 :(得分:0)
var3
答案 10 :(得分:0)
Try this:
n= int(input("")
if n%2==1:
print("Weird")
elif n%2==0 and n in range(3, 6):
print("Not Weird")
elif n%2==0 and n in range(6, 21):
print("Weird")
elif n%2==0 and n>21:
print("Not Weird")
答案 11 :(得分:0)
n=3
if(n%2!=0):
print("Weird")
else:
if(n>=2 and n<=5):
print("Not Weird")
elif(n>=6 and n<=20):
print("Weird")
elif(n>20):
print("Not Weird")