는 ([19,17,18,7])가 true를 돌려
이유가 무엇인지 모르겠지만 언제든지 if 문을 종료하고 매번 true로 인쇄됩니다.
def des(l):
for i in range(len(l)):
if (l[i]<l[i+1]):
return [False,i]
else:
return True
는 ([19,17,18,7])가 true를 돌려
이유가 무엇인지 모르겠지만 언제든지 if 문을 종료하고 매번 true로 인쇄됩니다.
def des(l):
for i in range(len(l)):
if (l[i]<l[i+1]):
return [False,i]
else:
return True
이 밖으로 시도 :
는def des(l):
for x in l:
try:
if x < l[l.index(x)+1 ]-1:
return True
except:
pass
return False
이 코드 단편은 질문을 해결할 수 있지만 [설명 포함] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) 정말 게시물의 품질을 향상시키는 데 도움이됩니다. 앞으로 독자의 질문에 답하고 있으며 코드 제안의 이유를 알지 못할 수도 있습니다. 또한 주석을 설명하기 위해 코드를 군중시키지 마십시오. 그러면 코드와 설명 모두 가독성이 떨어집니다! – gunr2171
그것은 더 선언적 방식으로 작성 될 수있다 : python3를 들어,
def is_descending(array):
return array == sorted(array, reverse=True)
또는 :
는def is_descending(array):
return array == list(sorted(array, reverse=True))
코드는 아무튼 네가 돌아 오기 때문에 일하지 않아.한 번 확인한 후/False
전체 목록을 확인한 후에 만 True
을 반환해야합니다. 여기
def des(l):
for i in range(1,len(l)):
if (l[i] > l[i-1]):
return False
return True
l = [19,17,12,10]
print (des(l))
함수를 작성하는 또 다른 방법은 다음과 같습니다 :
def des(l):
return all(i>j for i,j in zip(l,l[1:]))
문제는 당신이 오직 하나 개 점검을하고, 항상 즉시 반환 True
또는 것입니다 다음 그 일을하는 한 가지 방법은 False
.
def des(l):
for i in range(len(l)):
if (l[i]<l[i+1]):
return [False,i]
return True
이 당신에게 또 다른 문제를 줄 것이다 그러나 : 당신이 전체 목록을 확인할 때까지
대신`진정한 반환하지 않아야
>>> des([4,3,2,1])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in des
IndexError: list index out of range
이 때를하기 때문에 range
에서 마지막 값을 얻으려면 목록의 끝을 넘어서는 값을보십시오. 그 문제를 해결하는 가장 쉬운 방법은 범위에서 하나를 빼기하는 것입니다 : 파이썬에서
def des(l):
for i in range(len(l) - 1):
if (l[i]<l[i+1]):
return [False,i]
return True
, 그것은 range(len(...))
를 사용하는 일반적으로 나쁜 습관이다. 더 나은 옵션은 (index, value)
쌍 시퀀스를 반환 enumerate
이지만, 그 위의 문제가 해결되지 않습니다
def des(l):
for i, v in enumerate(l):
if (v < l[i+1]):
return [False,i]
return True
이 여전히 IndexOutOfRange의 오류가 있습니다. 우리는 목록을 척에 의해 우리가 이상 반복하는 것은 하나의 짧은 것을 해결할 수 :
def des(l):
for i, v in enumerate(l[:-1]):
if (v < l[i+1]):
return [False,i]
return True
그리고 거기 당신은 훨씬 더 "파이썬"(스타일로 파이썬 전문가 할 것 즉) 해결책을 가지고 있습니다.
이 코드에는 다른 문제가 하나 있습니다. if des(my_list)): ...
을 수행하면 작동하지 않습니다. 이는 비어 있지 않은 list
(return 문에 []
을 사용하여 만드는 내용이 인 경우 항상 truthy이기 때문입니다.
오름차순 항목의 색인을 가져 오려면 실제로 그럴 수는 없지만 함수 이름에서 명확하게 지정해야합니다. 당신은 단지 성공 True
를 반환하기 때문에
또한,
is_descending, bad_index = des(...)
할 수 없습니다. 더 나은 내가 그룹 내 결과 쌍을 괄호를 사용하고 있음을
def des(l):
for i, v in enumerate(l[:-1]):
if (v < l[i+1]):
return (False,i)
return (True, None)
참고도 될 것이다,이 새로운 tuple
만듭니다. 일반적으로, list
s는 회원의 모든이 같은 일을 나타내는 경우 회원은이 경우와 같이 다른 일을 나타내는 경우, tuple
사용해야 사용해야합니다, 그들은 결과을 나타내며, 오류가 발생했습니다.
def des(l):
for i in range(len(l)):
if (l[i]<l[i+1]):
return [False,i]
return True
false가 아니라면 True를 반환하고, for 루프 전체가 돌아 왔을 때만 true를 반환해야합니다. 따라서 for 루프 외부에 있어야합니다. 루프가 끝나고 아무것도 반환되지 않은 경우 True를 반환하면
인덱스 범위를 벗어난 오류가 발생하지 않습니까? 그것은해야 할 것 같습니다 .. – Aaron
오류를 나타내는 짧은 ** 완벽한 ** 프로그램을 제공해주십시오. 당신의 프로그램은 a) 결코'des()'를 호출하지 않고, b) 결코 아무것도 인쇄하지 않습니다. 자세한 내용은 [mcve]를 참조하십시오. –
또한 귀하가 궁금해하는 것이 명확하지 않습니다. 질문 할 질문이 있습니까? –