반복문과 함수

토마스 보젠, 2020년 9월

이 연습은 3장을 보완합니다.

연습

1.

URL 문자열에서 웹사이트 도메인을 가져오는 website() 함수를 만듭니다. 예를 들어, 함수에 "www.google.com"이 전달되면 "google"을 반환해야 합니다.

def website(url):  # noqa: F405, F811, F821
    pass  # Remove this line and add your answer here.

2.

두 개의 정수(ab)를 받아들이고 a가 나머지 없이 b로 나누어지는 경우 True를 반환하는 divisible(a, b) 함수를 만듭니다. 예를 들어, divisible(10, 3)False를 반환해야 하고 divisible(6, 3)True를 반환해야 합니다.

def divisible(a, b):  # noqa: F405, F811, F821
    pass  # Remove this line and add your answer here.

3.

리스트 이해를 사용하여 다음 숫자 리스트의 모든 숫자를 제곱하세요.

l = [1, 2, 3, 4, 5, 6, 7, 8, 9]  # noqa: E741, F811

# Your answer here.

4.

다음 이름 리스트에 대해 대문자로 시작하는 단지 단어 리스트을 생성하는 리스트 이해력을 작성하세요(힌트: str.isupper()).

names = ["Steve Irwin", "koala", "kangaroo", "Australia", "Sydney", "desert"]  # noqa: F811

# Your answer here.

5.

다음 keysvals 리스트의 경우 딕셔너리 이해를 사용하여 {'key-0': 0, 'key-1': 1 등} 형식의 딕셔너리을 만듭니다(힌트: zip()은 이해/루핑에 사용할 객체에 두 리스트을 결합하는 데 도움이 됩니다).

keys = [f"key-{k}" for k in range(10)]  # noqa: F811
vals = range(10)  # noqa: F811

# Your answer here.

6.

이 질문은 조금 더 어렵습니다. 한 번에 최대 10개의 숫자 리스트을 배치하여 0부터 n까지의 숫자를 생성하는 listgen(n)이라는 제너레이터(Generators) 함수를 만듭니다. 예를 들어 함수는 다음과 같이 동작해야 합니다.

g = 리스트 생성(100)
다음(g)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
다음(g)
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
다음(g)
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
등등

g = 리스트 생성(5)
다음(g)
def listgen(n):  # noqa: F811
    pass  # Remove this line and add your answer here.

7.

다음 코드에서 생성된 오류를 포착하고 “I catch you!”를 인쇄하려면 try/prop를 작성하세요. 발생한 특정 오류를 포착했는지 확인하세요. 이는 일반적으로 모든 오류를 포착하는 것보다 더 나은 방법입니다!

5 / 0

# Your answer here.
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-7-9e2b7a365344> in <module>
----> 1 5 / 0
      2 
      3 # Your answer here.

ZeroDivisionError: division by zero

8.

사용자가 입력한 모든 정수를 가져와 그 합계를 반환하는 lucky_sum() 함수를 만듭니다. 그러나 값 중 하나가 13이면 합계에 포함되지 않으며 오른쪽에 있는 값도 포함되지 않습니다.

예를 들어 함수는 다음과 같이 동작해야 합니다.

Lucky_sum(1, 2, 3, 4)
10

Lucky_sum(1, 13, 3, 4)
1

Lucky_sum(13)
0

이 예시는 관련 codingbat 챌린지에서 영감을 받았습니다.

def lucky_sum(*args):  # noqa: F811
    pass  # Remove this line and add your answer here.



솔루션

1.

URL 문자열에서 웹사이트 도메인을 가져오는 website() 함수를 만듭니다. 예를 들어, 함수에 "www.google.com"이 전달되면 "google"을 반환해야 합니다.

def website(url):  # noqa: F405, F811, F821
    return url.split(".")[1]


website("www.google.com")  # noqa: F405, F811, F821
'google'

2.

두 개의 정수(ab)를 받아들이고 a가 나머지 없이 b로 나누어지는 경우 True를 반환하는 divisible(a, b) 함수를 만듭니다. 예를 들어, divisible(10, 3)False를 반환해야 하고 divisible(6, 3)True를 반환해야 합니다.

def divisible(a, b):  # noqa: F405, F811, F821
    return True if a % b == 0 else False


print(divisible(10, 3))  # noqa: F405, F811, F821
print(divisible(6, 3))  # noqa: F405, F811, F821
False
True

3.

리스트 이해를 사용하여 다음 숫자 리스트의 모든 숫자를 제곱하세요.

l = [1, 2, 3, 4, 5, 6, 7, 8, 9]  # noqa: E741, F811
[_**2 for _ in l]
[1, 4, 9, 16, 25, 36, 49, 64, 81]

4.

다음 이름 리스트에 대해 대문자로 시작하는 단지 단어 리스트을 생성하는 리스트 이해력을 작성하세요(힌트: str.isupper()).

names = ["Steve Irwin", "koala", "kangaroo", "Australia", "Sydney", "desert"]  # noqa: F811
[_ for _ in names if _[0].isupper()]
['Steve Irwin', 'Australia', 'Sydney']

5.

다음 keysvals 리스트의 경우 딕셔너리 이해를 사용하여 {'key-0': 0, 'key-1': 1 등} 형식의 딕셔너리을 만듭니다(힌트: zip()은 이해/루핑에 사용할 객체에 두 리스트을 결합하는 데 도움이 됩니다).

keys = [f"key-{k}" for k in range(10)]  # noqa: F811
vals = range(10)  # noqa: F811
{k: v for k, v in zip(keys, vals)}
{'key-0': 0,
 'key-1': 1,
 'key-2': 2,
 'key-3': 3,
 'key-4': 4,
 'key-5': 5,
 'key-6': 6,
 'key-7': 7,
 'key-8': 8,
 'key-9': 9}

6.

이 질문은 조금 더 어렵습니다. 한 번에 최대 10개의 숫자 리스트을 배치하여 0부터 n까지의 숫자를 생성하는 listgen(n)이라는 제너레이터(Generators) 함수를 만듭니다. 예를 들어 함수는 다음과 같이 동작해야 합니다.

g = 리스트 생성(100)
다음(g)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
다음(g)
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
다음(g)
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
등등

g = 리스트 생성(5)
다음(g)
def listgen(n):  # noqa: F811
    counter = 0  # noqa: F811
    numbers = list(range(n))  # noqa: F811
    while counter <= n // 10:
        yield numbers[10 * counter : 10 * (counter + 1)]
        counter += 1

7.

다음 코드에서 생성된 오류를 포착하고 “I catch you!”를 인쇄하려면 try/prop를 작성하세요. 발생한 특정 오류를 포착했는지 확인하세요. 이는 일반적으로 모든 오류를 포착하는 것보다 더 나은 방법입니다!

try:
    5 / 0
except ZeroDivisionError:
    print("I caught you!")
I caught you!

8.

사용자가 입력한 모든 정수를 가져와 그 합계를 반환하는 lucky_sum() 함수를 만듭니다. 그러나 값 중 하나가 13이면 합계에 포함되지 않으며 오른쪽에 있는 값도 포함되지 않습니다.

예를 들어 함수는 다음과 같이 동작해야 합니다.

Lucky_sum(1, 2, 3, 4)
10

Lucky_sum(1, 13, 3, 4)
1

Lucky_sum(13)
0

이 예시는 관련 codingbat 챌린지에서 영감을 받았습니다.

def lucky_sum(*args):  # noqa: F811
    if 13 in args:
        return sum(args[: args.index(13)])
    return sum(args)