この付録には各章末の練習問題の解答を載せています。(この解答を見る前に)自分で時間を取って考えてみることを強く推奨します。プログラミングは構文や関数の名前を覚えるだけではありません。外国語学習と同じように、練習すればするほど上達します。プログラミングを練習できるウェブサイトはたくさんあります。
プログラミングでは唯一絶対の正解があるわけではありません。期待通りに動けば正解だと言ってよいでしょう。それでも本書のプロジェクトのプログラム例を知りたければ、「本書で使用したファイルのダウンロード」をご参照ください。
1. 演算子は+、-、*、/で、値は'hello'、-88.8、5です。
2. 文字列は'spam'で、変数はspamです。文字列は引用符(クォート)で囲まれています。
3. 本章で紹介した3つのデータ型は、整数型、浮動小数点数型、文字列型です。
4. 式は値と演算子から構成されます。式はすべて評価されて一つの値になります。
5. 式は評価されて一つの値になるのに対し、文は一つの値になりません。
6. 変数baconの値は20になります。式bacon + 1はbaconの値に再代入されていません(再代入するならbacon = bacon + 1と書きます)。
7. この2つの式はどちらも'spamspamspam'という文字列に評価されます。
8. 変数名を数字で始めることはできないからです。
9. int()、float()、str()関数です。それぞれ渡された値を整数、浮動小数点数、文字列に評価します。
10. 99は整数であり、+演算子では文字列同士しか結合できないので、この式はエラーになります。このエラーを修正するにはI have eaten ' + str(99) + ' burritos.'とします。
1. TrueとFalseです。語頭は大文字のTとFで残りは小文字です。
2. and、or、notです。
3. True and TrueはTrue
True and FalseはFalse
False and TrueはFalse
False and FalseはFalse
True or TrueはTrue
True or FalseはTrue
False or TrueはTrue
False or FalseはFalse
not TrueはFalse
not FalseはTrue
4. False
False
True
False
False
True
5. ==、!=、<、>、<=、>=です。
6. 等価演算子は==で、2つの値を比較してブール値に評価します。代入演算子は=で、変数に値を格納します。
7. 条件とはブール値に評価される式であり、フロー制御で使います。
8. print('bacon')とprint('ham')がそれぞれブロックであり、以下に示すif spam == 10:とprint('Done')の間の部分が3つ目のブロックです。
print('eggs')
if spam > 5:
print('bacon')
else:
print('ham')
print('spam')
9. 以下のコードです。
if spam == 1:
print('Hello')
elif spam == 2:
print('Howdy')
else:
print('Greetings!')
1. CTRL-Cを押せば無限ループに陥ったプログラムを止められます。
2. break文はループから抜け出します。continue文はループの最初に戻ります。
3. どれも同じです。range(10)は0から10まで(10は含まない)ですし、range(0, 10)は0から始めることを明示的に指定していますし、 range(0, 10, 1)は増分が1であることを明示的に指定しています。
4. 以下のコードです。
for i in range(1, 11):
print(i)
と
i = 1
while i <= 10:
print(i)
i = i + 1
5. spam.bacon()と呼び出します。
1. 関数を利用すると、コードの重複を避けることができ、短くて読みやすく更新しやすいコードを書けます。
2. 関数内のコードが実行されるのは関数が呼び出されたときです。定義されたときではありません。
3. def文で関数を定義(作成)します。
4. 関数はdef文とdef節内のコードから構成されています。関数呼び出しはプログラム実行を関数内に移します。関数呼び出しは関数の返り値に評価されます。
5. グローバルスコープは1つだけあります。関数が呼び出されるたびにローカルスコープが作成されます。
6. 関数の呼び出しが終わったときにローカルスコープは破棄されるので、ローカルスコープ内の変数は消えてしまいます。
7. 返り値とは関数呼び出しにより評価される値のことです。他の値と同じように、返り値を式の一部にすることができます。
8. 関数にreturn文がない場合に返り値はNoneになります。
9. global文で関数内からグローバル変数を参照できます。
10. Noneのデータ型はNoneTypeです。
11. このimport文はareallyourpetsnamedericという名前のモジュールをインポートします(実際にはこのような名前のPythonのモジュールは存在しません)。
12. spam.bacon()と呼び出します。
13. エラーが発生する可能性のあるコードをtry節内に入れます。
14. try節内でエラーが発生したらexcept節が実行されます。
15. グローバル変数のrandom_numberが一度だけランダムな数に設定され、その変数random_numberがget_random_dice_roll()関数から参照されています。そのため、get_random_dice_roll()関数を呼び出すたびに同じ数が返されます。
1. assert spam >= 10, 'The spam variable is less than 10.'
2. assert eggs.lower() != bacon.lower(), 'The eggs and bacon variables are the same!'またはassert eggs.upper() != bacon.upper(), 'The eggs and bacon variables are the same!'
3. assert False, 'This assertion always triggers.'
4. logging.debug()を呼び出すために必要なのは以下の2行です。
import logging
logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s -
%(levelname)s - %(message)s')
5. logging.debug()がprogramLog.txtという名前のファイルにログメッセージを書き込むのに必要なのは以下の2行です。
import logging
logging.basicConfig(filename='programLog.txt', level=logging.DEBUG,
format=' %(asctime)s - %(levelname)s - %(message)s')
6. DEBUG、INFO、WARNING、ERROR、CRITICAL
7. logging.disable(logging.CRITICAL)
8. ログメッセージはログ関数呼び出しを削除せずに無効化でき、ログレベルを選択して無効化することもできます。また、タイムスタンプ付きでログメッセージを作成できます。
9. ステップオーバーは関数内に入らず関数のコードを一気に実行します。ステップインは関数内に入り1行ずつ実行します。ステップアウトは現在の関数呼び出しが終わるまで最速で実行します。
10. 継続をクリックすると、デバッガはプログラムが終了するかブレークポイントが設定された行に到達したときに停止します。
11. ブレークポイントとは、プログラム実行が到達したときにデバッガを停止させるコードの行の設定のことです。
12. Muでブレークポイントを設定するには、行番号をクリックして赤丸を表示させます。
1. 空リスト値です。要素を含まないリスト値で、''が空文字列値であるのと似ています。
2. spam[2] = 'hello'(リストはインデックスが0から始まるので3番目の値のインデックスは2であることに注意してください)
3. 'd'('3' * 2は文字列の'33'になり、それがint()に渡されてから11で割られるので、3に評価されます。値を用いる場所ならどこにでも式を用いることができます)
4. 'd'(負のインデックスは最後から数えていきます)
5. ['a', 'b']
6. 1
7. [3.14, 'cat', 11, 'cat', True, 99]
8. [3.14, 11, 'cat', True]
9. リストを結合する演算子は+で、繰り返す演算子は*です(文字列の場合と同じです)。
10. append()はリストの末尾に値を追加するのに対し、insert()はリスト中のどこにでも値を追加できます。
11. del文とremove()リストメソッドがリストから値を削除する2つの方法です。
12. リストと文字列の両方とも、len()に渡すことができますし、インデックスとスライスがあり、forループに使うことができ、結合や複製ができ、in演算子やnot in演算子に使うことができます。
13. リストはミュータブルです。つまり、値を追加したり削除したり変更したりできます。タプルはイミュータブルです。つまり変更できません。タプルは丸かっこ(と)で書くのに対し、リストは角かっこ[と]で書きます。
14. (42,)(末尾のカンマが必須です)
15. tuple()関数でリストからタプルを作成でき、list()関数でタプルからリストを作成できます。
16. リスト値の参照を格納しています。
17. copy.copy()関数はリストの浅いコピーで、copy.deepcopy()関数はリストの深いコピーです。入れ子になっているリスト内のリストをコピーするのは深いコピーのcopy.deepcopy()です。
1. {}(波かっこで作成します)
2. {'foo': 42}
3. 辞書に格納される要素には順序がありませんが、リストに格納される要素には順序があります。
4. KeyErrorエラーになります。
5. 違いはありません。in演算子はその値が辞書のキーに存在するかどうかを調べます。
6. 'cat' in spamは'cat'が辞書のキーにあるかどうかを調べるのに対し、'cat' in spam.values()は'cat'が辞書の値にあるかどうかを調べます。
7. spam.setdefault('color', 'black')
8. pprint.pprint()
1. エスケープ文字とは、コードに書き込むことが不可能(困難)な文字を表す文字列値のことです。
2. エスケープ文字\nは改行を表し、\tはタブを表しています。
3. エスケープ文字\\を使います。
4. 文字列をダブルクォートで囲んでいるので、Howl's中のシングルクォートに問題はありません。
5. 複数行文字列を利用すればエスケープ文字\nを使わなくても文字列中に改行を入れられます。
6.
'e'
'Hello'
'Hello'
'lo world!'
7.
'HELLO'
True
'hello'
8.
['Remember,', 'remember,', 'the', 'fifth', 'of', 'November.']
'There-can-be-only-one.'
9. それぞれ、rjust()、ljust()、center()文字列メソッドです。
10. lstrip()とrstrip()のメソッドがそれぞれ文字列の左端と右端から空白文字を除去します。
1. re.compile()関数がRegexオブジェクトを作成します。
2. raw文字列を使うとバックスラッシュをエスケープしなくてもすむからです。
3. search()メソッドはMatchオブジェクトを返します。
4. group()メソッドによりマッチした文字列が返されます。
5. グループ0はマッチした部分全体で、グループ1は最初のかっこ内の部分で、グループ2は2番目のかっこ内の部分です。
6. \(、\)、\.のように、かっこやピリオドをバックスラッシュでエスケープします。
7. 正規表現がグループ化されていなければ文字列を返し、グループ化されていれば文字列のタプルのリストを返します。
8. |は2つのグループの「または」の意味になります。
9. ?は質指定子の0回または1回のマッチという意味か非貪欲マッチの意味になります。
10. +は1回以上、*は0回以上のマッチです。
11. {3}は質指定子がちょうど3回のマッチ、{3,5}は質指定子が3回以上5回以下のマッチです。
12. \d、\w、\sは、それぞれ、数字、単語、空白文字にマッチします。
13. \D、\W、\Sは、それぞれ、数字以外、単語以外、空白文字以外にマッチします。
14. .*は貪欲マッチで、.*?は非貪欲マッチです。
15. [0-9a-z]または[a-z0-9]です。
16. re.compile()の第二引数にre.Iまたはre.IGNORECASEを渡せば大文字と小文字を区別しないようにできます。
17. .は通常改行文字以外のすべての文字にマッチします。re.compile()の第二引数にre.DOTALLを渡すと改行文字にもマッチするようになります。
18. sub()を呼び出すと文字列'X drummers, X pipers, five rings, X hens'が返されます。
19. re.VERBOSE引数を渡すとre.compile()に渡す文字列にスペースとコメントを入れられるようになります。
1. 相対パスは現在の作業ディレクトリに対して相対的です。
2. 絶対パスは/やC:\のようにルートフォルダで始まります。
3. Windowsでは、WindowsPath('C:/Users/Al')に評価されます。他のOSでは同じパスの別種のPathオブジェクトに評価されます。
4. 2つの文字列に対して/演算子を使うことはできないので、式'C:/Users' / 'Al'はエラーになります。
5. os.getcwd()関数は現在の作業ディレクトリを返し、os.chdir()は現在の作業ディレクトリを変更します。
6. .フォルダは現在のフォルダで、..は親フォルダです。
7. C:\bacon\eggsがディレクトリ名で、spam.txtがファイル名です。
8. 読み取りモードの'r'、書き込みモードの'w'、追記モードの'a'です。
9. 既存のファイルを書き込みモードで開くと内容が全部消えて上書きされます。
10. read()メソッドはファイルの内容全体を一つの文字列として返します。readlines()メソッドはファイルの内容の行ごとに文字列のリストを返します。
11. shelf値は辞書値と似ています。辞書と同じようにキーと値があり、keys()メソッドとvalues()メソッドがあります。
1. shutil.copy()は一つのファイルをコピーするのに対し、shutil.copytree()はフォルダとその中身をすべてコピーします。
2. ファイルのリネーム(移動)には、shutil.move()関数を使います。
3. send2trashはファイルやフォルダをごみ箱に移動します。shutilはファイルやフォルダを完全に削除します。
4. Fileオブジェクトのopen()メソッドに相当するZipFileのメソッドはzipfile.ZipFile()です。第一引数はファイル名で、第二引数はZIPファイルを開くときのモード(読み取り、書き込み、追記)です。
1. フォルダの中身を一覧表示するコマンドは、Windowsではdirで、macOSとLinuxではlsです。
2. PATH環境変数にはターミナルからプログラム名を実行したときに確認するフォルダのリストが入っています。
3. 変数__file__には現在実行中のPythonスクリプトのファイル名が格納されています。対話型シェルではこの変数は存在しません。
4. ターミナルウィンドウのテキストを消すコマンドは、Windowsではclsで、macOSとLinuxではclearです。
5. Windowsではpython -m venv .venv、macOSとLinuxではpython3 -m venv .venvを実行します。
6. Windowsではpython -m PyInstaller --onefile yourScript.py、macOSとLinuxではpython3 -m PyInstaller --onefile yourScript.pyを実行します。
1. webbrowserモジュールにはopen()メソッドがあり、ブラウザを立ち上げて指定したURLを開きます。requestsモジュールはウェブからファイルやページをダウンロードします。bs4モジュールはHTMLを解析します。
2. requests.get()関数が返すのはResponseオブジェクトです。そのオブジェクトのtext属性にダウンロードしたコンテンツが文字列として格納されています。
3. raise_for_status()メソッドです。ダウンロードに問題があれば例外を送出し、ダウンロードが成功していれば何もしません。
4. Responseオブジェクトのstatus_code属性にHTTPステータスコードが入っています。
5. 新しいファイルを「バイナリ書き込み」の'wb'モードで開き、Responseオブジェクトのiter_content()メソッドをforループで反復処理してチャンクをファイルに書き出します。次に例を示します。
saveFile = open('filename.html', 'wb')
for chunk in res.iter_content(100000):
saveFile.write(chunk)
6. たいていのオンラインAPIはJSON形式かXML形式でレスポンスを返します。
7. ChromeではF12キーを押すとデベロッパーツールが開きます。FirefoxではCTRL-SHIFT-C(WindowsとLinux)か-OPTION-C(OS X)でデベロッパーツールが開きます。
8. ページ上の要素を右クリックしてメニューから検証を選びます。
9. '#main'
10. '.highlight'
11. spam.get_text()
12. linkElem.attrs
13. seleniumモジュールはfrom selenium import webdriverでインポートします。
14. find_element()メソッドは最初にマッチした要素のWebElementオブジェクトを返します。find_elements()メソッドはすべてのマッチした要素のWebElementオブジェクトのリストを返します。
15. click()メソッドがマウスのクリックを、send_keys()メソッドがキーボードの入力をシミュレートします。
16. press('Control+A')メソッドがCTRL-Aを押すのをシミュレートします。
17. WebDriverオブジェクトのforward()、back()、refresh()です。
18. Pageオブジェクトのgo_forward()、go_back()、reload()です。
1. openpyxl.load_workbook()関数はWorkbookオブジェクトを返します。
2. sheetnames属性にはシート(ワークシート)名のリストが含まれています。
3. wb['Sheet1']
4. wb.active
5. sheet['C5'].valueまたはsheet.cell(row=5, column=3).value
6. sheet['C5'] = 'Hello'またはsheet.cell(row=5, column=3).value = 'Hello'
7. cell.rowとcell.column
8. そのシートの最終列と最終行が整数値として入っています。
9. openpyxl.cell.column_index_from_string('M')
10. openpyxl.cell.get_column_letter(14)
11. sheet['A1':'F1']
12. wb.save('example3.xlsx')
13. 数式は値と同じように設定します。セルのvalue属性に数式のテキスト文字列を設定します。数式は等号(=)で始まります。
14. load_workbook()を呼び出すときにdata_only=Trueを渡すと、OpenPyXLが数式ではなく数式の計算結果を取得するようになります。
15. sheet.row_dimensions[5].height = 100
16. sheet.column_dimensions['C'].hidden = True
17. ウィンドウ枠の固定とは、行と列が常に画面に表示されるようにすることです。見出しの行と列でよく使います。
18. openpyxl.chart.Reference()、openpyxl.chart.Series()、openpyxl.chart.BarChart()、chartObj.append(seriesObj)、add_chart()
1. 認証情報ファイル、Google Sheetsのトークンファイル、Google Driveのトークンファイルです。
2. ezsheets.Spreadsheetオブジェクトとezsheets.Sheetオブジェクトです。
3. downloadAsExcel()メソッドを呼び出します。
4. Excelファイルの名前を渡してezsheets.upload()関数を呼び出します。
5. ss['Students']['B2']
6. ezsheets.getColumnLetterOf(999)
7. SheetオブジェクトのrowCountとcolumnCountの属性からわかります。
8. delete()メソッドを呼び出します。permanent=Trueキーワード引数を渡すと完全に削除されます。
9. Spreadsheet()関数でSpreadsheetオブジェクトを作成し、SpreadsheetオブジェクトのSheet()メソッドでSheetオブジェクトを作成します。
10. 例外が送出されます。
1. conn = sqlite3.connect('example.db', isolation_level=None)
2. conn.execute('CREATE TABLE students (first_name TEXT, last_name TEXT, favorite_color TEXT) STRICT')
3. isolation_level=Noneキーワード引数を渡してsqlite3.connect()を呼び出します。
4. INTEGERはPythonの整数型に相当し、REALは浮動小数点数型に相当します。
5. 厳格モードを設定するとすべてのカラムにデータ型が設定され、間違った型のデータを挿入しようとすると例外が送出されるようになります。
6. *は「そのテーブルのすべてのカラムを選択する」という意味です。
7. CRUDはデータベースが実行する4つの基本操作――作成(Create)、読み取り(Read)、更新(Update)、削除(Delete)――の頭字語です。
8. ACIDは、データベースのトランザクションが持つべき4つの特性――Atomic(原子性)、Consistent(一貫性)、Isolated(独立性)、Durable(永続性)――の頭字語です。
9. テーブルに新しいレコードを追加するクエリはINSERTです。
10. テーブルからレコードを削除するクエリはDELETEです。
11. WHERE節を指定しないと、UPDATEクエリはそのテーブルのすべてのレコードに適用されます。
12. インデックスとはカラムのデータを整理する構造のことで、ストレージ容量を消費しますがクエリが高速になります。'CREATE INDEX idx_birthdate ON cats (birthdate)'でcatsテーブルのbirthdateカラムにインデックスを作成します。
13. 外部キーは、あるテーブルのレコードを別のテーブルのレコードに関連付けます。
14. 'DROP TABLE cats'クエリを実行するとcatsテーブルを削除します。
15. インメモリデータベースを作成する際にファイル名を':memory:'と指定します。
16. iterdump()メソッドでデータベースを複製するクエリを作成するか、データベースファイルそのものをコピーします。
1. open()に'w'を渡して書き込みモードでFileオブジェクトを開く必要があります。
2. 最初のページが0なので、5ページ目のPageオブジェクトを取得するにはgetPage(4)を呼び出します。
3. decrypt('swordfish')を呼び出します。
4. -90、-180、-270という負の数を渡せば反時計回りに回転させられます。
5. docx.Document('demo.docx')
6. Paragraphオブジェクトはテキストの段落を表し、1つ以上のRunオブジェクトから構成されています。
7. Paragraphオブジェクトのリストを取得するにはdoc.paragraphsを使います。
8. Runオブジェクトです(Paragraphオブジェクトではありません)。
9. スタイル設定がどうであれ、TrueはそのRunオブジェクトを常に太字にして、FalseはそのRunオブジェクトを常に太字ではないようにします。NoneはそのRunオブジェクトのスタイル設定に応じて太字にしたりしなかったりします。
10. docx.Document()関数を呼び出します。
11. doc.add_paragraph('Hello there!')
12. 0から9までです。
1. Excelのスプレッドシートには文字列以外のデータ型の値を入れることができ、セルにフォント、サイズ、色、幅、高さの設定があり、セル結合ができ、図表を挿入できます。
2. open()を呼び出して取得したFileオブジェクトを渡します。
3. Fileオブジェクトを、Readerオブジェクトではバイナリ読み取りモード('rb')、Writerオブジェクトではバイナリ書き込みモード('wb')で開く必要があります。
4. writerow()メソッドです。
5. delimiterキーワード引数は行の中でセルを区切る文字列を変更します。lineterminatorキーワード引数は行を区切る文字列を変更します。
6. CSV、JSON、XMLはいずれもプレーンテキスト形式ですから、どれもテキストエディタで編集しやすいです。
7. json.loads()
8. json.dumps()
9. HTMLと似ているのはXMLです。
10. JSONではNone値をnullで表します。
11. JSONではブール値を小文字のtrueとfalseで表します。
1. Unixエポックとは、多くの日時プログラムで利用されている参照点のことで、UTCでの1970年1月1日午前0時0分0秒です。
2. time.time()
3. time.asctime()
4. time.sleep(5)
5. 渡された引数に最も近い整数を返します。例えば、round(2.4)は2を返します。
6. datetimeオブジェクトは瞬間的な時刻を表し、timedeltaオブジェクトは幅のある期間を表します。
7. datetime.datetime(2019, 1, 7).weekday()を実行すると、0が返されます。このことから、2019年1月7日は月曜日だとわかります。datetimeモジュールでは0が月曜日、1が火曜日、…6が日曜日です。
1. 認証情報ファイルとトークンファイルは、どのGoogleアカウントでGmailにアクセスするかをEZGmailモジュールに伝えます。
2. GmailMessageオブジェクトは一通のメールを表し、GmailThreadオブジェクトは返信を往復する会話スレッドを表します。
3. search()に渡す文字列に'has:attachment'を含めます。
4. SMSメールゲートウェイは、動作するとは限らず、ショートメールが届いたか届かなかったかがわからず、今送れたとしてもいつ送れなくなるかわかりません。
5. ntfyでプッシュ通知を送受信するのに使うPythonのライブラリはRequestsライブラリです。
1. RGBA値とは、それぞれ0から255までの4つの整数のタプルです。4つの整数は、赤、緑、青、アルファ(透明度)に対応します。
2. ImageColor.getcolor('CornflowerBlue', 'RGBA')を呼び出すと(100, 149, 237, 255)というRGBA値が返されます。
3. ボックスタプルとは、長方形の左端を表すx座標、長方形の上端を表すy座標、長方形の右端の右隣のx座標、長方形の下端の下隣のy座標の、4つの整数のタプルです。
4. Image.open('zophie.png')
5. im.sizeで取得できるタプルの最初の整数が幅で2番目の整数が高さです。
6. im.crop((0, 50, 50, 100))(crop()には4つの整数ではなくボックスタプルを渡します)
7. Imageオブジェクトのim.save('new_filename.png')メソッドを呼び出します。
8. ImageDrawモジュールを使います。
9. ImageDrawオブジェクトにpoint()、line()、rectangle()などの図形描画メソッドがあります。ImageオブジェクトをImageDraw.Draw()関数に渡せばImageDrawオブジェクトを取得できます。
10. 折れ線グラフはplt.plot()、散布図はplt.scatter()、棒グラフはplt.bar()、円グラフはplt.pie()で作成できます。
11. savefig()メソッドを呼び出します。
12. plt.show()関数は新しいウィンドウにグラフを描画します。グラフのデータがリセットされるのでこの関数を連続して2回呼び出すことはできません。もう一度グラフを描画したければプロット関連の関数をもう一度実行する必要があります。
1. Tesseractはデフォルトで英語を認識します。
2. PyTesseractが動作するのにPillow画像ライブラリが必要です。
3. image_to_string()関数がImageオブジェクトを取りその画像に含まれる文字列を返します。
4. Tesseractは活字のスキャンから文字を抽出するのであって、写真から文字を抽出することはできません。
5. tess.get_languages()
6. lang='eng+jpn'
7. NAPS2を使えばOCRテキストを埋め込んだPDFを作成できます。
1. マウスを画面の四隅に動かします。
2. pyautogui.size()関数が画面の幅と高さの2つの整数のタプルを返します。
3. pyautogui.position()関数がマウスカーソルのx座標とy座標の2つの整数のタプルを返します。
4. moveTo()関数はマウスを画面の絶対座標に動かすのに対し、move()関数はマウスを現在の位置から相対的に動かします。
5. pyautogui.dragTo()とpyautogui.drag()
6. pyautogui.typewrite('Hello world!')
7. pyautogui.write()にキーを表す文字列(例:'left')のリストを渡すか、pyautogui.press()にキーを表す文字列を渡します。
8. pyautogui.screenshot('screenshot.png')
9. pyautogui.PAUSE = 2と設定します。
10. ウェブブラウザを制御するならPyAutoGUIよりもSeleniumを使ったほうがよいです。
11. PyAutoGUIは、予期せぬポップアップウィンドウが表示されるなどして所期の目的を達成できない状況でもクリックしたり入力したりしてしまうからです。
12. pyautogui.getWindowsWithTitle('Notepad')関数を呼び出します。
13. w = pyatuogui.getWindowsWithTitle('Firefox')を実行してからw.activate()を実行します。
1. 例えば1分間に300語の速さにするならengine.setProperty('rate', 300)を呼び出します。
2. pyttsx3モジュールはWAV形式で保存します。
3. pyttsx3とWhisperはオンラインサービスに依存していません。オフラインでも利用できます。
4. pyttsx3とWhisperは英語以外の言語に対応しています。
5. Whisperのデフォルトの機械学習モデルの名前は'base'です。
6. 字幕ファイルの2つの一般的な形式は、SRT(SubRip Subtitle)とVTT(Web Video Text Tracks)です。
7. yt-dlpはYouTube以外の多数のサイトから動画をダウンロードできます。