2016-11-20 1 views
3

"Automate the Boring Stuff with Python"책을 통해 작업 중이며 연습 문제 중 하나에 붙어 있습니다. 내 솔루션은 셸에서 작동하지만 프로그램으로 실행하려고 할 때가 아닙니다.셸에서 프로그램으로 작동하도록 코드를 가져올 수 없습니다.

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

으로 구분 모든 항목에 문자열을 인수로 목록 값을 받아 반환하는 함수를 작성 :

는이 같은 목록 값을 말해봐 : 여기에 문제의 프롬프트는 쉼표와 공백이 있으며 마지막 항목 앞에 삽입됩니다. 예를 들어 이전 스팸 목록을 함수에 전달하면 '사과, 바나나, 두부 및 고양이'가 반환됩니다. 하지만 함수는 전달 된 모든 목록 값을 처리 할 수 ​​있어야합니다.

'apples, bananas, tofu and cats' 

그러나 때 나는 그 결과 내가 원하는 얻을, 쉘에서 목록을 정의하고 그것에 위의 단계를 실행하면

def listToString(usersList): 
    myStr = ', '.join(str(i) for i in usersList[0:-1]) # converts all but last list element to string and joins with commas 
    myStr = myStr + ' and ' + str(usersList[-1]) # adds on "and", converts final list element to string and adds to myStr 
    print(myStr) 

myList = input() 
listToString(myList) 

: 여기

내 코드입니다 위의 프로그램에서 단계를 함께 그룹화하려고하면 결과는 다음과 같습니다.

어떤 아이디어?

시간을내어이 책을 읽으면 대단히 감사합니다. 이미 동일한 연습 문제에 대한 몇 가지 다른 주제가 이미 있으므로 (herehere), 나는 계속 나아가서 게시했습니다.

+0

'listToString'에는 문자열이 아닌 실제 목록을 전달해야합니다. 'input' (파이썬 3에서) _always_는 문자열을 반환합니다. –

+1

연습 문제는 사용자가 입력 한 목록을 가져 오기로되어 있다고 말하지 않습니다. 스크립트에'spam'리스트를 작성하십시오. –

+0

OP에게 'input'에 의해 반환 된 문자열을 목록으로 변환하라는 모든 사람들에게 : 질문을 읽으십시오! 연습은 _list_을 허용하는 함수를 작성하는 것입니다. 불필요한 여분의 합병증을 추가하는 것입니다.이 운동은 단순히이 운동에 필요하지 않습니다. –

답변

2

input()은 문자열을 반환합니다. 당신은 str.split

myList = input().split() # 'apple banana' -> ['apple', 'banana'] 

그렇지 않으면, 문자열이 반복되는 사용하여 함수에 전달하기 전에 나열 할 문자열을 변환해야합니다; 각 문자를 항목으로 생성합니다.

>>> a_string = 'abcd' 
>>> for x in a_string: 
...  print(x) 
... 
a 
b 
c 
d 
1

input은 문자열이고 list이 아니기 때문에 문제가 있습니다.
먼저 입력을 목록으로 변환 한 다음 함수를 실행하십시오.

입력시 .split()을 사용해보십시오.

1

문자열의 입력을하면, 입력은 "분할()"확인 문자열로 변환 :

def listToString(usersList): 
     myStr = ', '.join(str(i) for i in usersList[0:-1]) # converts all but last list element to string and joins with commas 
     myStr = myStr + ' and ' + str(usersList[-1]) # adds on "and", converts final list element to string and adds to myStr 
     print(myStr) 

myList = input().split(',') 
listToString(myList) 

입력 :

apples,bananas,tofu,cats 

출력 :

apples, bananas, tofu and cats 
1

목록에 합류하면됩니다. roblem 문 세부 정보,

def listToString(userList): 
    return ', '.join(userList[:-1]) + ' and ' + userList[-1] 

실행 : 당신이 사용자의 목록을 받아 들일 때

In [13]: listToString(spam) 
Out[13]: 'apples, bananas, tofu and cats' 

지금, 당신이 날 문자열, 당신은 목록으로 변환 할 필요가 을 받고 있습니다.

In [16]: mylist = input() 
'apples,bananas,tofu,cats' 

In [19]: mylist.split(',') 
Out[19]: ['apples', 'bananas', 'tofu', 'cats'] 

In [20]: userList = mylist.split(',') 

In [21]: listToString(userList) 
Out[21]: 'apples, bananas, tofu and cats' 
관련 문제