So now we've modified our get_next_target procedure,
and it will return None as the first output if there's no next target.
Otherwise it will return the URL and the end_quote.
And now all we have to do is figure out how to keep going.
Let's look at what we were doing before.
We turned these 4 lines into our procedure
so now we can--instead of having all this code,
we're going to call the get_next_target
and assign the results.
Now we've got the value of URL, which we do on a print out,
so we're still going to print that out as before.
And we still want to update the value of page,
but we don't want to use end_quote now.
What we want to use is the value that was returned here,
which we assigned to the variable endpos.
And then, well, we're doing it all again.
So, all of the code here is just another call to get_next_target,
and similarly, this would be endpos instead of end_quote.
And we want to keep going until we get to the end,
so how do we decide when we've gotten to the end?
Well, we got to the end when the URL
that's returned is None.
And when the call to get_next_target returns None for the URL,
we know we're done.
We've seen a way to keep going. That's a while loop.
We've seen a way to do a test.
We want to test the URL.
And we have everything we need now to print all the links on the page.
I'm going to give you a start for how to write this procedure,
and then you're going to finish it.
What we're going to do is define a procedure
that will print all the links on the page,
and it takes the page as input, and so we want to use a while loop to keep going,
and I am going to leave blank the test condition for the while loop.
We'll leave that as something for you to figure out.
In the body of the while loop, what we're going to call get_next_target,
assigning URL and endpos to the result.
This is just like what we were doing in the example code.
Now what we need to do is check whether we got a valid URL,
so what we were doing here,
we assumed that we always got a valid URL,
and we printed it out, and we kept going, but we need to do something to test
whether the URL that we got back is None.
That's what we'll do.
We have if URL, and if that's true, that means we found a valid URL.
We didn't get the value None as the result from get_next_target.
And so we want to print that out as we were doing before.
We'll print the URL, and we'll advance the page
to the next position.
If we didn't get a valid URL,
that means that get_next_target did not find a link.
There were no more links on the page,
and we need to do something else, and I will leave blank
what we need to do here.
So, this is all we need for the code to print_all_links.
There are 2 parts left for you to do as the quiz here.
See if you can figure out what should go as the test condition for the while
and in the block for the else.
And if that's correct, you'll be able to print all the links on the page.
Ahora vamos a modificar nuestro procedimiento getnexttarget,
que retornará None como primera salida, si no hay siguiente objetivo.
De otro modo retornará el URL y end_quote
Y ahora todo lo que tenemos que hacer es determinar como hacer que se repita hasta el final.
Veamos lo que estuvimos haciendo aquí.
Hemos convertido estas cuatro lineas en nuestro procedimiento
de modo que podemos, en lugar de tener todo este código,
vamos a llamar a getnexttarge
y asignar los resultados.
Ahora que obtuvimos el valor de URL, el cual vamos a mostrar,
vamos a seguir mostrando eso como antes.
Y todavía deseamos actualizar el valor de page,
pero no queremos usar end_quote todavía.
Lo que queremos usar es el valor que fue devuelto aquí,
el cual lo hemos asignado a la variable end_pos.
Y luego, bueno, vamos a repetirlo de nuevo.
Entonces todo el código aquí es simplemente otra llamada a getnexttarget,
y similarmente, esta sería endpos en lugar de endquote
y queremos que siga operando hasta que lleguemos el final.
Entonces como decidimos cuando hemos alcanzado el final?
Bueno, alcanzamos el final cuando el URL
que es retornado es None.
Y cuando la llamada a getnexttarget devuelve None para el URL,
sabemos que hemos terminado.
Hemos visto una forma de hacer que se repita, eso es un bucle while.
Hemos visto como hacer una prueba.
Queremos probar el URL.
Y ahora tenemos todo lo que necesitamos para imprimir todos los entaces de la página.
Les voy a dar los primeros pasos de como escribir este procedimiento,
y luego ustedes van a terminarlo.
Lo que vamos a hacer es definir un procedimiento
que mostrará todos los enlaces de page.
y toma page como entrada y luego queremos usar un bucle while para mantenerlo operando,
y voy a dejar la condición de prueba en blanco para el bucle while.
Dejaremos eso como algo que ustedes deben determinar.
En el cuerpo del bucle while, vamos a llamar a getnexttarget,
asignando el URL y end_pos al resultado.
Esto es similar a lo que estuvimos haciendo en el código de ejemplo.
Ahora, lo que vamos a verificar es si tenemos un URL válido,
eso es lo que estuvimos haciendo aquí,
asumimos que siempre obteníamos un URL válido,
y lo mostrabamos y manteníamos operando, pero necesitamos hacer algo para probar
si el URL que obtuvimos es None.
Eso es lo que haremos.
Tenemos si URL y si es verdadero, eso significa que encontramos un URL válido.
No obtuvimos el valor de None como resultado de getnexttarget.
Y así queremos mostrar como lo hacíamos antes.
Mostraremos el URL, y avanzaremos la página a la
siguiente posisción.
Si no obtenemos un URL válido,
significa que getnexttarge no encontró un enlace.
No hubo más enlaces en la página,
y necesitamos hacer algo más y dejaré en blanco
lo que necesitamos hacer aquí.
Entonces, esto es todo lo que necesitamos para el código de printalllinks.
Hay dos partes faltantes para que hagas la prueba.
Si puedes determinar lo que debería ir en la condición de prueba de While
y en el bloque else.
Y si eso es correcto serás capaz de imprimir todos los links de la página.
Così abbiamo modificato la procedura "getnexttarget",
che ritornerà None come primo output se non c'è nessun prossimo target.
Altrimenti ritorna l'url e la posizione degli apici di chiusura.
Dobbiamo pensare a come continuare.
Guardiamo a quello che abbiamo fatto.
Abbiamo convertito queste 4 righe in una procedura
così, invece di avere questo codice.
chiameremo "getnexttarget"
e assegneremo i risultati.
Ora abbiamo il valore dell'url, che usiamo in una stampa
così stiamo stampando come prima.
Vogliamo ora aggiornare il valore di "page",
ma non vogliamo usare ora "end_quote".
Quello che vogliamo usare è il valore ritornato qui,
che è assegnato alla variabile "endpos".
Allora, è quello che stiamo già facendo.
Così, tutto il codice qui è solo un'altra chiamata a "getnexttarget",
e similarmente, sarà "endpos" invece di "end_quote"
Vogliamo proseguire fino ad incontrare la fine,
così ora, decidiamo, quando abbiamo raggiunto la fine?
La raggiungiamo quando l'url
ritornata è "None"
E quando la chiamata a "getnexttarget" restituisce "None" per l'url
sappiamo che abbiamo fatto.
Vediamo un modo per ciclare, che è un ciclo while
Abbiamo visto un modo per fare un test.
Vogliamo testare l'url.
E abbiamo tutto quello che serve per stampare tutti i link della pagina.
Ti darò un punto di partenza per scrivere la procedura,
e andrai a finire tu.
Definiremo una procedura
che stamperà tutti i links della pagina,
e prenderà in input la pagina, così ci serve un ciclo while,
e lascerò in bianco la condizione di test per il ciclo while.
La lascerò come qualcosa a cui dovrai pensare tu
Nel corpo del ciclo while, richiameremo "getnexttarghet"
assegnando i risultati a url e endpos.
E' semplicemente quello che stavamo facendo nel codice di esempio
Quello che dobbiamo verificare è quando abbiamo delle url valide,
-- lo faccevamo qui --
assumevamo di avere sempre un url valido,
e lo stampavamo, e continuavamo, ma ci serve testare
se l'url è valida o è "None"
E' quello che faremo.
Abbiamo "if url", e se if è vero, abbiamo una url valida
e non abbiamo None come risultato di getnexttarget
Poi vogliamo stampare come facevamo prima.
Stamperemo l'url, e avanzeremo nella pagina
alla prossima posizione.
Se non abbiamo un url valido,
significa che "getnexttarget" non ha trovato un link.
Non ci sono altri link nella pagina,
e faremo qualcos'altro, lasceremo in bianco
quello che dobbiamo fare qui.
Questo è tutto quello che ci serve nel codice di "printalllinks"
Ci sono due parti lasciate a te nel quiz.
Pensa a quello che è da mettere nella condizione di test per il while
e nel blocco per l'else.
Se sarà corretto, saremo in grado di stampare tutti i link della pagina.
get＿next＿target関数を修正できました
次のターゲットがない場合 1つ目の出力としてNoneを返します
そうでなければurlとend＿quoteを返します
ではこれを継続させる方法とは？
これまでに行ってきたことを振り返りましょう
この4行を関数に変換します
それによってこのすべてのコードの代わりに
get＿next＿targetを呼び出すことができます
そして結果を代入します
urlの値がprintで取得できました
pageの値もアップデートする必要がありますが 今はend＿quoteを使用しません
使用するのはここで返された値です
それを変数endposに代入しました
そのあとでもう一度すべてを繰り返します
ここにあるすべてのコードが get＿next＿targetをもう一度呼び出すものです
同様にこれがend＿quoteの代わりに endposになります
終わりにたどり着くまで続ける必要があります
終わりはどう判断するのでしょう？
返されるurlの値がNoneとなる時が終わりです
get＿next＿targetの呼び出しで 返されるurlがNoneとなったら
終了だと分かります
継続する方法はwhileループです
URLをテストする方法も分かりました
これで必要な学習は済みましたので 完成させてみてください
関数の書き方に進みましょう
ページ上のすべてのリンクを出す関数を定義します
入力としてpageを受け取りwhileループを使用します
whileループのテスト条件を空白にしておきます
それが何か自分で見つけてみてください
whileループの本体で結果にURLとendoposを代入する get＿next＿targetを呼び出します
サンプルのコードで行ったことに似ていますね
ここで有効なurlを取得できたかどうか確認しましょう
ここでは有効なURLを常に取得すると仮定しました
出力し継続しました
戻されたurlがNoneかどうか テストする必要があります
このように行います
if urlがTrueなら有効なURLを 見つけられたという意味です
get＿next＿targetの結果として Noneの値は取得しませんでした
前に学んだ時のように出します
URLを出し次の位置へページを進めます
有効なURLを取得できなかった場合は
get＿next＿targetがリンクを 見つけられなかったという意味です
ページにリンクが残されていません
別のことを行う必要があります 空白にしておきます
以上がprint＿all＿linksのコードに必要なことです
あなたが埋める所が2つ残っています
whileのテスト条件とブロックのelseのテスト条件が どんなものになるのか
解明できたか確認してみてください
正しければページ上の すべてのリンクを出せるでしょう
Então, agora modificamos o procedimento get_next_target,
e ele retorna None como primeira saída, se não existe o próximo alvo.
Caso contrário, ele retorna a url e end_quote.
E agora, tudo o que temos a fazer é descobrir como repetir.
Vamos dar uma no que fizemos antes.
Nós convertemos essas 4 linhas em um procedimento,
e então, agora, ao inv;es de termos todo esse código,
vamos chamar get_next_target,
e atribuir os resultados.
Agora temos o valor da url, que temos que imprimir --
então ainda vamos imprimir isso, como anteriormente.
E ainda queremos atualizar o valor de page,
mas agora não queremos usar end_quote.
O que queremos usar é o valor que foi retornado aqui,
que é atribuído à variável endpos.
E então, bem, vamos fazer isso tudo de novo.
Então, todo esse código aqui é simplesmente outra chamada a get_next_target,
e, de modo similar, isso seria endpos, aon invés de end_quote.
E nós queremos repetir até que cheguemos ao final.
Então, como vamos decidir se chegamos ao final?
Bem, nós chegamos ao final quando a url
que é retornada é None.
E quando a chamada a get_next_target retorna None para a url,
sabemos que terminamos.
Nós já vimos uma maneira de fazer repetição -- é com um while loop.
Já vimos como fazer um teste.
Queremos testar a url.
A temos tudo o que precisamos agora, para imprimir todos os links da página.
Eu vou dar para você o início de como escrever este procedimento,
e então você vai terminá-lo.
O que vamos definir é um procedimento
que irá imprimir todos os links da página.
Ele recebe a página como entrada, e então queremos usar um while loop para fazer a repetição,
e eu vou deixar em branco a condição de teste do while loop.
Eu vou deixar isso para você descobrir.
No corpo do while loop, o que vamos fazer é chamar get_next_target,
atribuindo o resultado a url e endpos.
Isso é exatamente como fizemos no código exemplo.
Agora, o que precisamos fazer é varificar se obtivemos uma url válida --
então, o que estávamos fazendo aqui
era supor que sempre obtínhamos uma url válida
e nós a imprimíamos, e continuávamos a repetir. Mas precisamos fazer alguma coisa para testar
se a url que obtivemos é None.
É isso que vamos fazer.
Temos: if url -- se isso é True -- isso significa que encontramos uma url válida.
Não obtivemos o valor None como resultado de get_next_target,
e portanto queremos imprimir isso, como fazíamos antes.
Vamos imprimir a url, e vamos avançar na página,
para a próxima posição.
Se não obtivemos uma url válida,
isso significa que get_next_target não encontrou um link.
Não havia mais links na página,
e temos que fazer alguma outra coisa, e eu vou deixar isso em branco --
o que precisamos fazer aqui.
Então, isso é tudo o que precisamos para o código de print_all_links.
Deixamos 2 partes para você fazer neste teste.
Veja se você é capaz de descobrir qual deve ser a condição do teste do while
e o que deve vir no bloco do else.
E, se você fizer certo, você poderá imprimir todos os links da página.
Итак, мы модифицировали нашу процедуру get_next_target(),
и теперь она возвращает None в качестве первого результата, если во входной строке нет ссылки.
В противном случае она вернет URL и позицию закрывающей кавычки.
И теперь нам осталось сообразить, как повторять ее вызов.
Посмотрим на то, что мы сделали ранее.
мы превратили эти 4 строчки кода в нашу процедуру,
и теперь мы можем вместо того, чтобы писать весь этот код,
просто вызвать get_next_target()
и поместить ее результаты в переменные.
Теперь у нас есть значение URL, которое мы выводим на экран,
мы продолжим выводить его, как и раньше.
И нам все еще нужно изменять значение page,
но теперь мы не будем использовать для этого end_quote.
Вместо него мы используем это возвращаемое значение,
которое мы присвоили переменной endpos.
И затем все повторяется вновь.
Вместо всего этого кода мы производим еще один вызов get_next_target(),
и вновь используем endpos вместо end_quote.
И нам нужно вызывать процедуру пока мы не доберемся до конца страницы,
но как мы узнаем, что добрались до конца?
Ну, мы понимаем, что добрались до конца, когда
вместо URL возвращается None.
И когда вызов get_next_target() возвращает None вместо URL,
мы понимаем, что закончили.
Мы уже нашли способ повторять один и тот же код – while-цикл.
Мы узнали, как выполнять проверку условия,
чтобы проверять URL.
И теперь мы знаем все необходимое для того, чтобы вывести все ссылки на веб-странице.
Я покажу вам, как начать писать эту процедуру,
а вы закончите ее.
Мы определим процедуру,
которая выводит все ссылки на странице,
принимая на вход строку page; поэтому мы будем использовать в ней while-цикл,
и я оставлю пустым условие while-цикла.
Его вам надо будет вписать самостоятельно.
В теле while-цикла мы будем вызывать get_next_target(),
присваивая результаты вызова переменным url и endpos.
То же самое мы делали в нашем примере.
Теперь нам нужно проверить правильность полученного URL,
раньше мы всегда
полагали, что получаем корректный URL,
выводили его на экран и продолжали выполнять код, но теперь нам нужно проверять,
равен ли возвращаемый URL значению None.
Этим мы и займемся.
У нас есть условие if url, и если оно истинно, мы нашли корректный URL.
То есть мы не получили значение None в результате вызова get_next_target(),
и значит нам нужно вывести его на экран, как и ранее.
Мы выводим URL, и урезаем содержимое page,
убирая все символы до endpos.
Если мы не получаем корректный URL,
это значит, что get_next_target() не нашла ссылку.
То есть на странице больше не осталось ссылок,
и нам нужно сделать кое-что другое, но вместо этого «кое-чего»
я оставлю прочерк.
Итак, это все что нам нужно для процедуры print_all_links() [вывести все ссылки].
Чтобы выполнить это задание, вам нужно заполнить два пропуска.
Посмотрим, сумеете ли вы сообразить, каким должно быть условие while-цикла
и содержимое else-блока.
И если ваша догадка окажется верной, вы сможете вывести все ссылки на веб-странице.
Отже, ми модифікували нашу процедуру getnexttarget(),
і тепер вона повертає None у якості першого результату, якщо у вхідному рядку немає посилання.
В протилежному випадку вона поверне URL та позицію закриваючої лапки.
І тепер нам залишилось збагнути, як повторити її виклик.
Подивимось на те, що ми зробили раніше.
ми перетворили ці 4 рядки кода у нашу процедуру,
і тепер ми можемо замість того, щоб писати весь цей код,
просто викликати getnexttarget()
та розмістити її результати в змінні.
Тепер у нас є значення URL, яке ми виводимо на екран,
мо продовжимо виводити його, як і раніше.
І нам все ще треба змінювати значення page,
але тепер ми не будемо використовувати для цього end_quote.
Замість нього ми використовуємо це повертне значення,
яке ми просвоїли змінній endpos.
І потім все повторюється знов.
Замість всього цього коду ми робимо ще один виклик getnexttarget(),
і знов використовуємо endpos замість end_quote.
І нам необхідно викликати процедуру, доки ми не дійдемо до кінця сторінки,
проте як ми дізнаємось, що дійши до кінця?
Ну, ми розуміємо що дістались кінця, коли
замість URL повертається None.
І коли виклик getnexttarget() повертає None замість URL,
ми розуміємо, що закінчили.
Ми вже знайшли спосіб повторювати один і той самий код - while-цикл.
Ми дізнались, як виконувати перевірку умови,
щоб перевіряти URL.
І тепер ми знаємо все необхідне для того, аби вивести всі посилання на веб-сторінці.
Я покажу вам, як почати писати цю процедуру,
а ви завершите її.
Ми визначимо процедуру,
яка виводить всі посилання на сторінці,
приймаючи на вхід рядок page; тому ми будемо використовувати у ній while-цикл,
і я залишу порожньою умову while-циклу.
Її вам треба буде вписати самостійно.
В тілі while-циклу ми будемо викликати getnexttarget(),
присвоюючи результати виклику змінних url та endpos.
Те ж саме ми робили у нашому прикладі.
Тепер нам необхідно перевірити правильність отриманого URL,
раніше ми завжди
вважали, що отримуємо коректний URL,
виводили його на екран та продовжували виконувати код, але тепер нам необхідно перевіряти,
чи рівний повертний URL значенню None.
Цим ми й займемося.
У нас є умова if url, та якщо вона істинна, ми знайшли коректний URL.
Тобто ми не отримали значення None у результаті виклику getnexttarget(),
і значить, нам необхідно вивести його на екран, як і раніше.
Ми виводимо URL, та врізуємо уміст page,
прибираючи всі символи до endpos.
Якщо ми не отримауємо коректний URL,
це значить, що getnexttarget() не знайшла посилання.
Тобто на сторінці більше не залишилось посилань,
і нам необхідно зробити щось інше, але замість цього "щось"
я залишу прочерк.
Отже, це все, що нам необхідно для процедури printalllinks() [вивести усі посилання].
Щоб виконати це завдання, вам необхідно буде заповнити два пропуски.
подивимось, чи зможете ви зрозуміти, якою повинна бути умова while-циклу
та вміст else-блоку.
Та якщо ваша здогадка виявиться правильною, ви зможете вивести усі посилання на веб-сторінці.
我们已经修改了getnexttarget（寻找下一目标）过程
如果没有下一目标 程序就返回None（无） 这是第一个输出
否则 就返回URL（网址）和end_quote（结束引用）
现在我们要做的是让程序继续运行
先来看看我们之前所做的
我们将这4行代码变成了一个过程
所以 现在我们就不用再写一遍这些代码
而是可以直接调用getnexttarget
并赋值结果
我们已经有URL的值 并且想将其打印出来
现在我们仍然会将其打印出来
而且我们仍然想要更新页面的值
但我们不想使用end_quote了
我们想用的是这里返回的值
也就是我们赋给变量endpos（结束位置）的值
接下来 我们再来一遍
这里的所有代码就是再次调用getnexttarget
同样的 这里应该是endpos而不是end_quote
我们想一直继续到结束
但什么时候才是结束呢？
当返回的URL是none时
就是结束
当调用的getnexttarget返回none
我们就知道 程序结束了
让程序继续的一种方式就是while循环
我们知道如何做测试
我们想要测试URL
要打印页面上的所有链接 我们已经掌握了所需的全部知识
我会开个头 教你们如何写这个程序
之后你们就自己完成
我们将定义一个过程
打印出页面上的所有链接
输入为该页面 我们想用一个while循环来让程序持续运行
我将把while循环的测试条件留为空白
由你们去填
在while循环的主体语句中 我们将调用getnexttarget
将URL和endpos赋值给结果
这和我们之前示范的代码是一样的
现在我们要做的是 检查是否有一个有效URL
这就是这一块要做的事情
假设我们总是有一个有效URL
我们将其打印出来 程序继续运行
但是我们还需要测试 我们得到的URL是否是None
这就是我们将要做的
这里是if URL 如果为真 就意味着我们找到了一个有效URL
从getnexttarget得到的结果不是none
那么和之前一样 我们想将其打印出来
我们将打印这个URL 并继续搜索余下内容
直到下一个位置
如果我们没找到有效URL
这意味着getnexttarget没有找到链接
页面上没有更多链接了
那我们就要做点别的什么
我在这里也留一个空
这就是printalllinks（打印所有链接）所需要的全部代码
有两处空白是要你们去填的
看你们是否能想出while的测试条件
以及else的程序块
如果你们写对了 就可以打印出页面上的所有链接
我們已經修改了 get-next-target 程序
如果沒有下一個標靶 (target)， 它會傳回 None 作為第一個輸出
否則，會傳回 url 和 end-quote
現在我們要做的是，如何讓程序持續執行
先看一下我們之前所做的
我們將這 4 行轉化為一個程序
所以現在，我們不必再寫這些程式碼
而是呼叫 get-next-target
來指定結果
我們已經有 url 的值，我們已經印出來了
現在，我們仍然把它印出來
而且，我們仍要更新 page 的值
不過，我們不想使用 end-quote
我們想使用這裡傳回的值
也就是指定給變數 endpos 的值
接下來，我們再做一次
所以，這裡所有的程式只是再次呼叫 get-next-target
同樣的，這裡應該是 endpos 而不是 end-quote
我們想一直繼續下去，直到結尾
但是，如何決定我們到了結尾呢？
嗯，當傳回的 url 是 None 的時候
表示我們到了結尾
當呼叫 get-next-target 傳回的 url 為 None
我們知道已經完成了
我們看到讓程序持續執行的一種方式，就是 while loop
我們知道如何做測試 (test)
我們要測試 url
我們掌握了所需的全部知識，可以印出頁面上的所有 link
我會起個頭，教你們如何寫這個程序
之後你們就得自行完成
我們要定義一個程序
印出頁面上的所有 link
需要 page 作為輸入，我們要用 while loop 來持續執行
我把 while loop 的測試條件空下來
我將留下這些空白，讓你們去思考
在 while loop 的主體，我們呼叫 get-next-target
把 url 和 endpos 指定給結果
這和我們之前的範例程式是一樣的
現在我們必須檢查，我們是否得到了有效的 url
就是這裡要做的事
假設我們總是得到有效的 url
我們把它印出來，繼續執行下去，但是我們仍需要測試
我們得到的 url 是否為 None
這就是我們要做的
if url，如果是 True，就表示我們找到了有效的 url
我們從 get-next-target 得到的結果不是 None
那麼和之前一樣，我們把它印出來
我們印出這個 url，並且推進
到頁面的下一個位置
如果我們沒找到有效的 url
就表示 get-next-target 沒有找到 link
在頁面上沒有更多的 link
那我們就要做點別的，我在這裡也留下空白
我們應該在這裡做點事
這就是 print-all-links 需要的所有程式碼
留了兩處空白作為你們的測驗
看看你們是否能想出 while 的測試條件
以及 else 的程式塊 (block)
如果你們寫對了，就可以印出頁面上的所有 link