【まず1嫁】くだすれPython(超初心者用) その56
レス数が950を超えています。1000を超えると書き込みができなくなります。
当スレに★Python以外のプログラミング言語での回答類を書くべからず★
派生言語はそれぞれ専スレがある(この板にあるとは限らない)ので、そっち池。
「Ruby」「Rails」「某言語では」「クソチョンw」をNGワード登録推奨。荒らしは、完全スルー放置が一番きらいです。
このスレッドは「お勉強」スレのほうには書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を、勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますので、お礼は Python の布教と初心者の救済をお願いします。
★エラーを解決したい場合★は、
表示されたエラーの全文(勝手に省略やスクショうp等の横着クソ行為禁止)と、
実行環境(Pythonのバージョン・OSとIDEの種類およびバージョン)をシッカリ書くこと。
Pythonの★ソースコードをそのまま5ちゃんに貼るとインデントが崩れてチヌ★
【【【複数の連続半角スペースはなにもなかったことにされる&タブは普通には入れられない】】】掲示板の仕様なので、
プログラム文は↓等の、いわゆるコードうp用サイトに貼ってこいください。
ttps://techiedelight.com/compiler/ Run Code機能あり。
ttp://ideone.com/ デフォ設定はC用のため、言語選択ボタン押下がピコ手間かも。
ttp://codepad.org/ ほぼ直感的に使える。Run codeボタンあり。
ttp://pastebin.com/ まずまずシンプル。
ttp://dpaste.com/ とてもシンプル。消えるまでの日数は十分長ーく指定のこと。
◇Python公式◇ http://www.python.org/
◇まとめwiki◇ ttp://python.rdy.jp/wiki.cgi
〇前スレ〇 【まず1嫁】くだすれPython(超初心者用) その55
https://mevius.5ch.net/test/read.cgi/tech/1633070807/
次スレたては >>985 あたりが挑戦する。
### END OF TEMPLATE ### >>866
他の言語は知りませんが、Pythonは関数を呼ぶ処理より前に
関数定義がないといけないんですよ
だから関数のあるスクリプトファイルを開くと、まず関数の羅列が
ズラズラと目に入るわけでして、文書を上から下に読んでいくという
人間の自然な動作に合わないのです >>869
def main(): sukinakansuu()
def sukinakansuu(): pass
if __name__ == '__main__': main()
みたいに書くよ >>866
Python の def 文は「実行文」だから定義される関数を呼び出す前に実行しないといけないのでJSみたいにするとエラーになる
ちなみに実行文だから
if xxx:
def foo:
print('foo1')
else:
def foo:
print('foo2')
みたいにして実行時に関数の定義を変えることもできる >>872
それ「実行文だから」とか全然理由になってない
インタプリタ型の言語ならJSでもRubyでもPHPでも全く同じことできる
実行文ではないC言語でも定義より先に呼び出したらエラーになる >>872
┏━━━━━━━━━━━━┓
┃The image you are .┃
┃requesting does not exist .┃
┃or is no longer available. .┃
┃ ┃
┃imgur.com ┃
┗━━━━━━━━━━━━┛ seleniumでaタグをclickしてswitch_to.windows(driver.window_handles[1])しても<html><head></head><body></body></html>っていうページにアクセスするようになる
なんで無内容に?どうすればいいんだろう
そもそもGUI上はクリックしてないんだけどなんだこれ >>875
> インタプリタ型の言語ならJSでもRubyでもPHPでも全く同じことできる
やれるね、だから何?
> 実行文ではないC言語でも定義より先に呼び出したらエラーになる
コンパイル言語で定義より先に呼び出し?
実行順序とソース上の順序を混同してるだろw >>877
解決
クリックしたあと2秒sleepさせたら出来た
読み込みに時間が掛かるんだな >>878
だから何じゃねーよww
ダメだこいつw >>875
C言語の場合、宣言すれば定義は後回しでOK。 >>880
ダメなのはお前の頭だろw
他の言語なんて関係ないし 実行文って、コンパイル型言語で宣言文と区別する意味の用語だから、Pythonでは、完全にナンセンス
「実行文だから」は何の意味も持たない
実行文でない文は、逆にあるのか? インタプリタだって全部の行を一行ずつ実行しながら解釈しているとは限らないんだから区別はあっておかしくない。 宣言っていまいち意味わからんのだけど。
defは今の名前空間に新たにオブジェクト(function/callable)を作成するって捉える方がしっくりする。
だから、名前()で呼び出しするためには、その前に作成が終わってなきゃダメよね、ってなる。
って考えると、Pythonは上から下に順番に実行しかしていない、ってわかる。 関数定義をまとめた関数をスクリプト末尾に書いて
それをスクリプト先頭で呼ぶようにすれば…と思ったけどダメですね
ズラズラ並んだ関数定義を見たくない場合、定義部分を別スクリプトにして
それをimportすればいいのかな? 868のやり方じゃ駄目なんけ?main()の呼び出しを最後に書く以外は関数の並び順は自由だし、関数名がmainなら最初に実行されるだろうことは暗に容易に伝わる。
自分も呼び出すほうを上、呼び出されるほうを下に書くほうが読みやすいと感じるから常にそうしてるよ >>889
自分はメイン処理をトップレベルに書く派なので
残念ながらこの手法は使えません
しかし知識として知りたくはあります
>>868ってmain()より下にあるhoge()をmain()から呼べるってことですよね
それは何故でしょうか >>890
> 868ってmain()より下にあるhoge()をmain()から呼べるってことですよね
> それは何故でしょうか
main()が(定義される時じゃなくて)実行される時はdef hoge()も実行済みだから そのこだわりはよくわからんな…
デメリットしか思いつかん >>885
>>872で「実行文だから実行時に関数定義をかえることができる」と書いてるのは嘘だったってことかな? >>893
実行までに各々定義すればいいだけだからなんの問題もないだろ >>894
Pythonの話とJSの話の区別もつかない無能乙 どうでもいい話になってきてるような
スレタイにふさわしいと言えばそうだが スレタイ通り下らない話で盛り上がってて実に素晴らしい。 >>891
実行というからおかしくなる
関数のシグニチャを評価するタイミングと
関数のボディを評価するタイミングの違い
前者が他言語でいう宣言文の役割
Cのプロトタイプ宣言とかと同じ
Pythonでも宣言として捉えたほうが分かりやすいよ >>891
うーんよくわかりません
なぜ上にある関数から下にある関数を呼べるのか
私の脳はここまでです
>>892
メリットが二つあります
・スクリプトの先頭から実行が始まるので流れを追いやすい
・メイン処理の字下げが一段少なく済む >>901
> 先頭から実行が始まる
先頭に書いてあるのがmain関数なら上から読み下せるのは同じじゃね? うちはスクリプトの末尾にこの2行、ってのが定番たわ。
if __name__ == '__main__':
main() >>900
だからそんな思考回路だと
if xxx:
def foo:
print('foo1')
else:
def foo:
print('foo2')
みたいなコード見たらなんで宣言2個あってもいいんだよ?ってなるだろ >>902
main関数が処理の始まりかどうかは結局下を見ないと確定しないので…
ならばトップレベルにメイン処理を書く方が安心確実と思う次第です def main(): hoge()
def hoge(): print(‘hoge’)
main()
Pythonの評価順は基本的に上から下に一行ずつ
1行目ではdef main():までの関数シグニチャのみ評価してボディは評価されない(それがdefの役目)
2行目も同じようにdef hoge():までの関数シグニチャのみ評価
3行目の関数呼び出し時にmain関数のボディが評価される
そのタイミングではhoge関数はシグニチャが評価され関数として宣言済みなのでhogeを呼び出せる >>901
Pythonインタープリターの気持ちになって考えればわかると思うよ
1: def main():
2: hoge()
3: def hoge():
4: print(‘hoge’)
5: main()
1を実行する時は2の内容をmainで登録する(この時点では2自体は実行されない)
3も同様に4の内容をhogeで登録する
5のmainの呼び出しで2が実行されて4が呼ばれるので実行順は1→3→5→2→4のようになる >>906
そう思うのは自由だけどPythonでは無理だから諦めるか他の言語にするしかない >>905
宣言が2個あったところで何が問題なの?
2個あったらエラーにするルールのある言語もあるけどPythonにそんなルールない >>906
確かにそのとおりだけど、あんまり他人を疑いすぎると禿げちゃうよ これからはクラス定義もクラスメソッドも関数もごちゃごちゃにして途中でjson入れたり意味なく連想配列作ったりいきなりタプルにしたり判読し辛いコード書くことに決めた
初心者が初心者になる前に躓いて読めなくなるようにしていこう javascriptは同じ名前の関数が並んでてもエラーにならないな。後ろが使われる グローバル変数・定数の定義とか、
場合分けしてモジュール等をインポートするときとか、
これらをサブ関数の中か、その前にグローバルで書くべきかいつも悩むわ
モジュール等のインポート
グローバル変数・定数の定義
場合分けによるモジュール等のインポート(環境依存)
サブ関数の定義
場合分けによるモジュール等のインポート(環境非依存)
メイン関数の定義
メイン関数の実行(>>903)
これ、問題ある? グローバル変数・定数の定義なんかも
サブ関数としてまとめて定義して、メイン関数で呼び出してグローバル宣言したほうがいいのかな? >>916
まあjavascriptはvarで同じ変数使ってもエラーにならないような言語だしね
さすがに最近はletで重複させるとエラーになるみたいだけど 機能別にモジュール作って、関数詰め込んで使ってるんだが、合ってる? 一連の流れ見てもよくわからんのだけど、質問は何なの? 自分の思い通りにソース書きたいけど仕様上書けない、どうしたらいいのって愚痴 もう質問じゃないよね。だったら区切ってもいいでしょ >>917
普通にモジュール分割していいなら
メイン関数は定義せず__main__.pyのトップレベルに書く
定数は定数用のモジュールを用意してimport 「オレは気に入らない」って人は生きるの辛そう。
柔軟性が無いと常に何かと戦うことになる。 こだわりなくてもいいとこなら別にそれでいいんじゃね
こだわらなきゃいけない事なんていくらでもあるだろう とにかく在日は悪いことしかしない
在日は皆殺しにすべき! 俺も最初の頃はこだわり持って色々なこと試してたけど結局シンプルイズベストだと気づいてさっさと書くようにしたら効率上がったなぁ
まぁある程度新しいことにも挑戦するべきだけどさ
でもセイウチ演算子の使い所がよく分からないよね > でもセイウチ演算子の使い所がよく分からないよね
C言語やってたら余裕
with open("sample.txt") as f:
while text := f.readline():
print(text) それfor文より何がいいの?
というかファイルのデータなくなったらエラーでないの?
while文の終了条件がわからない >>933
for line in f: print(line)
ファイルオブジェクトはiterableで行読み込みする
てかふつうこう書かん?
>>932
https://docs.python.org/ja/3/library/stdtypes.html#truth
ファイル終端で空文字列(=偽)が返って終了 0.1*3==0.3がFalseになるのに、0.1*2==0.2がTrueになるのはなぜですか? >>938
二進数だから
>>939
そうなんだけど、0.2はその誤差が何で出ないのかなってわかんなくて聞いたけど、書いてすぐわかっちゃった (2^((2^(35-1))-1))*(2-(2^-4060))
の計算がしたいんだが、できないのでとりあえず
2^17179869183 の計算がしたいが、
多倍長電卓LMで一瞬で解答が得られる
2^2147483647 でさえも、
ttps://paiza.io/projects/RM8L_oSwcs5_ghDFro5Sew
でも
ttp://codepad.org/ZhAiGY69
でも
ttps://ideone.com/TeJEDo
でもタイムアウトして困っています。 6億桁ぐらいか?
そんなのprintしろって言われても困っちゃうよ >>944
そんだけデカい桁扱いたいなら
Decimal使いつつ、デフォルトの指数設定も弄らないとオーバフロー起こすぞ
https://docs.python.org/ja/3/library/decimal.html
コード例としてはこんな感じ
https://ideone.com/exndwC
(桁数6億ぐらいだから多分合ってると思う) >>947
どうもありがとう。
大変参考になります。 decimal 使わずとも print しなけりゃ時間内に終わるよね? 有効桁数100桁で2^17179869183の計算ができました。
https://ideone.com/dqhOTo
どうもありがとう。 >>949-950
カレットが使えないんじゃないかな?
計算結果が違っている。
ttps://ideone.com/SNjYuo
**で置き換えてみたがランタイムエラーになる。
ttps://ideone.com/F2N5yS
ttps://ideone.com/WUSd0H 元の式をコピペして動いたと思っちゃった。
確かに ** にしないと計算結果違っちゃうね。
python の int は多倍長計算してくれると思ってたけど
上限あったのね。勉強になったです。 >>954
二進数 誤差
でググりもしてないならこの分野向いてない >>955
なんで0.2も0.3も二進数で表現できないのに0.2は誤差がでないんですか? >>956
答えとしてはたまたまでPythonの浮動小数点の実装方針
>>> [(x, 1e-1 / 10 ** x) for x in range(10)]
これでイメージつくかも 0.2 に誤差がでないのではなく、
誤差付き 0.1 を2倍した結果が、誤差付き 0.2 と等しくなる、
というだけ
0.1, 0.2 を二進数にすると、それぞれ以下の無限小数になる
0.00011001100..
0.0011001100..
これらを正規化すると、以下のようになる
1.1001100.. x 2^-4
1.1001100.. x 2^-3
つまり、仮数部が同じで指数部が 1 だけ異なる
float の仮数部の桁数は小数点以下 52 桁なので、
53 桁目で丸められて誤差が入るが、
元の仮数部が同じなので、丸められた結果の仮数部も同じ 2進数の11 は、3 だけど、
110なら6、1100なら12
指数部の指定で、桁がずれるだけで、仮数部は同じ。
仮数部は2桁で、11とする
10進数の11 は、11だけど、
110なら110、1100なら1100
これも指数部の指定で、桁がずれるだけで、仮数部は同じ。
仮数部は2桁で、11とする プロジェクトのパッケージ構成で質問
https://packaging.python.org/en/latest/tutorials/packaging-projects/#packaging-python-projects
上記内の例で__init__.py、example.pyが存在するのはsrc直下ではなくて、その中にあるexample_package内であってますか? >>947で教えて頂いた
https://ideone.com
のdecimalのemaxって最大9を何個まで指定可能か知ってますか?
とりあえず801個まではテストしてみて動きましたが。 >>964
どうやったらそれを画面出力できるの?
print(decimal.MAX_EMAX)
NameError: global name 'decimal' is not defined
print(MAX_EMAX)
NameError: global name 'MAX_EMAX' is not defined __
 ̄ ̄ ̄二二ニ=-
'''''""" ̄ ̄
-=ニニニニ=-
/⌒ヽ _,,-''"
_ ,(^ω^ ) ,-''"; ;,
/ ,_O_,,-''"'; ', :' ;; ;,'
(.゙ー'''", ;,; ' ; ;; ': ,'
_,,-','", ;: ' ; :, ': ,: :' ┼ヽ -|r‐、. レ |
_,,-','", ;: ' ; :, ': ,: :' d⌒) ./| _ノ __ノ あのさぁ、俺はお前らを「道具」として見てンだわw
俺が聞いたらお前らは素直に答える。これだけでいいのw
decimal.MAX_EMAXの出力方法教えろやおらぁwwwwwwwwwwwwwww レス数が950を超えています。1000を超えると書き込みができなくなります。