def website(url):
pass # Remove this line and add your answer here.루프 및 함수

토마스 보젠, 2020년 9월
이 연습은 3장을 보완합니다.
연습
1.
URL 문자열에서 웹사이트 도메인을 가져오는 website() 함수를 만듭니다. 예를 들어, 함수에 "www.google.com"이 전달되면 "google"을 반환해야 합니다.
2.
두 개의 정수(a와 b)를 받아들이고 a가 나머지 없이 b로 나누어지는 경우 True를 반환하는 divisible(a, b) 함수를 만듭니다. 예를 들어, divisible(10, 3)은 False를 반환해야 하고 divisible(6, 3)은 True를 반환해야 합니다.
def divisible(a, b):
pass # Remove this line and add your answer here.3.
목록 이해를 사용하여 다음 숫자 목록의 모든 숫자를 제곱하세요.
l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# Your answer here.4.
다음 이름 목록에 대해 대문자로 시작하는 단지 단어 목록을 생성하는 목록 이해력을 작성하세요(힌트: str.isupper()).
names = ["Steve Irwin", "koala", "kangaroo", "Australia", "Sydney", "desert"]
# Your answer here.5.
다음 keys 및 vals 목록의 경우 사전 이해를 사용하여 {'key-0': 0, 'key-1': 1 등} 형식의 사전을 만듭니다(힌트: zip()은 이해/루핑에 사용할 객체에 두 목록을 결합하는 데 도움이 됩니다).
keys = [f"key-{k}" for k in range(10)]
vals = range(10)
# Your answer here.6.
이 질문은 조금 더 어렵습니다. 한 번에 최대 10개의 숫자 목록을 배치하여 0부터 n까지의 숫자를 생성하는 listgen(n)이라는 생성기 함수를 만듭니다. 예를 들어 함수는 다음과 같이 동작해야 합니다.
``파이썬 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)
::: {#cell-21 .cell execution_count=6}
``` {.python .cell-code}
def listgen(n):
pass # Remove this line and add your answer here.
```
:::
### 7.
다음 코드에서 생성된 오류를 포착하고 "I catch you!"를 인쇄하려면 `try`/`prop`를 작성하세요. 발생한 특정 오류를 포착했는지 확인하세요. 이는 일반적으로 모든 오류를 포착하는 것보다 더 나은 방법입니다!
::: {#cell-24 .cell tags='["raises-exception"]' execution_count=7}
``` {.python .cell-code}
5 / 0
# Your answer here.
```
::: {.cell-output .cell-output-error}
::: {.ansi-escaped-output}
```{=html}
<pre><span class="ansi-red-fg">---------------------------------------------------------------------------</span>
<span class="ansi-red-fg">ZeroDivisionError</span> Traceback (most recent call last)
<span class="ansi-green-fg"><ipython-input-7-9e2b7a365344></span> in <span class="ansi-cyan-fg"><module></span>
<span class="ansi-green-fg">----> 1</span><span class="ansi-red-fg"> </span><span class="ansi-cyan-fg">5</span> <span class="ansi-blue-fg">/</span> <span class="ansi-cyan-fg">0</span>
<span class="ansi-green-fg ansi-bold"> 2</span>
<span class="ansi-green-fg ansi-bold"> 3</span> <span class="ansi-red-fg"># Your answer here.</span>
<span class="ansi-red-fg">ZeroDivisionError</span>: division by zero</pre>
```
:::
:::
:::
### 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):
pass # Remove this line and add your answer here.솔루션
1.
URL 문자열에서 웹사이트 도메인을 가져오는 website() 함수를 만듭니다. 예를 들어, 함수에 "www.google.com"이 전달되면 "google"을 반환해야 합니다.
def website(url):
return url.split(".")[1]
website("www.google.com")'google'
2.
두 개의 정수(a와 b)를 받아들이고 a가 나머지 없이 b로 나누어지는 경우 True를 반환하는 divisible(a, b) 함수를 만듭니다. 예를 들어, divisible(10, 3)은 False를 반환해야 하고 divisible(6, 3)은 True를 반환해야 합니다.
def divisible(a, b):
return True if a % b == 0 else False
print(divisible(10, 3))
print(divisible(6, 3))False
True
3.
목록 이해를 사용하여 다음 숫자 목록의 모든 숫자를 제곱하세요.
l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
[_**2 for _ in l][1, 4, 9, 16, 25, 36, 49, 64, 81]
4.
다음 이름 목록에 대해 대문자로 시작하는 단지 단어 목록을 생성하는 목록 이해력을 작성하세요(힌트: str.isupper()).
names = ["Steve Irwin", "koala", "kangaroo", "Australia", "Sydney", "desert"]
[_ for _ in names if _[0].isupper()]['Steve Irwin', 'Australia', 'Sydney']
5.
다음 keys 및 vals 목록의 경우 사전 이해를 사용하여 {'key-0': 0, 'key-1': 1 등} 형식의 사전을 만듭니다(힌트: zip()은 이해/루핑에 사용할 객체에 두 목록을 결합하는 데 도움이 됩니다).
keys = [f"key-{k}" for k in range(10)]
vals = range(10)
{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)이라는 생성기 함수를 만듭니다. 예를 들어 함수는 다음과 같이 동작해야 합니다.
``파이썬 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)
::: {#cell-47 .cell execution_count=14}
``` {.python .cell-code}
def listgen(n):
counter = 0
numbers = list(range(n))
while counter <= n // 10:
yield numbers[10 * counter : 10 * (counter + 1)]
counter += 1
```
:::
### 7.
다음 코드에서 생성된 오류를 포착하고 "I catch you!"를 인쇄하려면 `try`/`prop`를 작성하세요. 발생한 특정 오류를 포착했는지 확인하세요. 이는 일반적으로 모든 오류를 포착하는 것보다 더 나은 방법입니다!
::: {#cell-50 .cell execution_count=15}
``` {.python .cell-code}
try:
5 / 0
except ZeroDivisionError:
print("I caught you!")
```
::: {.cell-output .cell-output-stdout}
```
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):
if 13 in args:
return sum(args[: args.index(13)])
return sum(args)