2016-08-11 3 views
0

저는 을 통해 파이썬을 배우고 있습니다. 지루한 것들을 자동화하십시오과 나는 꽤 이해가 안되는 것을 실행 중입니다.파이썬 : <str과 int 사이에 지원되지 않습니다

목록의 요소를이 형식으로 인쇄하는 간단한 for 루프를 만들려고합니다 : W, X, Y, and Z.

내 코드는 다음과 같습니다

spam = ['apples', 'bananas', 'tofu', 'cats'] 

def printSpam(item): 
    for i in item: 
     if i < len(item)-1: 
      print (','.join(str(item[i]))) 
     else: 
      print ("and ".join(str(item[len(item)-1]))) 
    return 

printSpam(spam) 

나는 응답이 오류를 얻을 :

Traceback (most recent call last): 
    File "CH4_ListFunction.py", line 11, in <module> 
    printSpam(spam) 
    File "CH4_ListFunction.py", line 5, in printSpam 
    if i < len(item)-1: 
TypeError: '<' not supported between instances of 'str' and 'int' 

어떤 도움에 감사드립니다. 초보자를 도와 주셔서 감사합니다. 각 요소 위에

+0

'for ... in ...'이 어떻게 작동하는지 오해하고 있습니다. 'i'는 이미리스트의 문자열이고, 인덱스는 아니다. 따라서'<'는 문자열과 정수를 비교하고 있으며, item [i]는 의미가 없다. 또한, 당신은 하나의 아이템에'join '하려고 시도하고 있습니다! –

+0

기본적으로' "s"<4'을 (를)하고 있습니다. 이것은 말이되지 않습니다. – Carpetsmoker

+0

이 경우'i'는 문자열입니다. 문자열을 목록의 길이와 비교하려고합니다. – Harrison

답변

3

아하지만 for i in array 반복하므로이 if i < len(item)-1:문자열 (배열 요소 item)와 정수 (len(item)-1:)를 비교한다.

그래서 문제는 파이썬에서 how for works을 오해 한 것입니다.

빠른 수정?

당신이처럼 forfor i in range(len(array))와, range 등의 작업을 대체 할 수

>>> range(10) 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

을 따라서 획득 :

spam = ['apples', 'bananas', 'tofu', 'cats'] 

def printSpam(item): 
    for i in range(len(item)): 
     if i < len(item)-1: 
      print (','.join(str(item[i]))) 
     else: 
      print ("and ".join(str(item[len(item)-1]))) 
    return 

printSpam(spam) 

출력을 아마는하지만, 기대하지 않을 것이다, 'c'.join(array)은 배열의 다양한 요소 사이에 '접착제'로 'c'를 사용합니다. 문자 배열이 아닌 경우 문자열은 무엇입니까?

>>> ','.join("bananas") 
'b,a,n,a,n,a,s' 

따라서, 출력은 다음과 같습니다

a,p,p,l,e,s 
b,a,n,a,n,a,s 
t,o,f,u 
cand aand tand s 

우리는 어쨌든 더 잘 할 수 있습니다.

파이썬은 이른바 slice notation과 음수 인덱스 (배열의 끝에서 시작)를 지원합니다.

>>> spam[0:-1] 
['apples', 'bananas', 'tofu'] 
>>> spam[-1] 
'cats' 

이후 우리는

>>> ", ".join(spam[0:-1]) 
'apples, bananas, tofu' 

그리고

따라서
>>> ", ".join(spam[0:-1]) + " and " + spam[-1] 
'apples, bananas, tofu and cats' 

, 당신은 당신의 기능을 쓸 수 있습니다 단순히

def printSpam(item): 
    print ", ".join(item[0:-1]) + " and " + item[-1] 

그게 전부입니다. 작동합니다.

P.: 파이썬 및 배열 표기법에 관한 한 가지 :

>>> "Python"[::-1] 
'nohtyP' 
+1

이것은 문자 그대로 내가 읽은 파이썬의'for' 표기법에 대한 가장 유익한 설명이었고 나는'범위를 잊어 버린 것이 약간 당혹 스럽다.() 함수 내 코드; CodeAcademy는 적어도 저에게 그것을 가르쳐주었습니다. 돌아가서 다른 코드 연습을 시도하고 이번에는 다른 것을 만들 수 있는지 알아 보겠습니다. 귀하의 회신에 감사드립니다! – FlavorTownUSA

관련 문제