くだすれPython(超初心者用) その47【Ruby禁止】
■ このスレッドは過去ログ倉庫に格納されています
当スレに★Python以外のプログラミング言語での回答類を書くべからず★ ☆「Ruby では」「Rubyでは」をNGワード登録推奨 このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。 ★Pythonのソースコードはそのまま5ちゃんにコピペするとインデントが崩れるので ↓等のてきとうなソースコード用うpろだに貼ってきてください。 スクショをImgur等にうp といった 手抜き(クソ行為)禁止。 ttp://ideone.com/ デフォ設定はC用のため言語選択ボタン押下がピコ手間かも。 ttp://codepad.org/ ほぼ直感的に使える。Run codeボタンあり。 ttp://pastebin.com/ まずまずシンプル。 ttp://dpaste.com/ とてもシンプル。消えるまでの日数は十分長ーく指定のこと。 ttps://jupyter.org/try (旧try.jupyter.org)ちょっとめんどうそう ◆エラーを解決したい場合は、表示されてるエラー全文(勝手に省略禁止)と 実行環境(Pythonのバージョン・OS名・IDEの種類とバージョン)をシッカリ書くこと。 ◇Python公式サイト◇ http://www.python.org/ ◇まとめwiki◇ ttp://python.rdy.jp/ 〇前スレ〇 くだすれPython(超初心者用) その46【Ruby禁止】 https://mevius.5ch.net/test/read.cgi/tech/1577948214/ >>329 >ウインドウを閉じてまた開くと、普通の回答が戻ってきて不気味です Mac では端末の設定ファイルに、~/.bashrc を使うか知らないけど、 たぶん端末の設定ファイルに、設定を書き込んだから、 端末を再起動(閉じて開き直す)すると、設定ファイルを再読み込みするから、状態が変わる! だから設定ファイルに書き込んだら、常に端末を再起動すればよい 例えば、Windows 10, WSL, Ubuntu 18.04 で、Ruby のバージョンマネージャー・rbenv を使うと、 ~/.bashrc に、以下の2行を追加するように言われる。 内容は、環境変数PATH の先頭に、rbenv のパスを追加して、rbenv init を実行する export PATH="$HOME/.rbenv/bin:$PATH" eval "$(rbenv init -)" 2行を追加してから、source ~/.bashrc と入力して、~/.bashrc を再読み込みするか、 端末を再起動すると、更新された、~/.bashrc を読み込むので、 echo $PATH と入力すると、確かに先頭に、~/.rbenv/bin が追加されているので、 which rbenv と入力すると、~/.rbenv/bin/rbenv が表示される。 これで、rbenv コマンドをグローバルで使える 以下、rbenv install 2.6.5, rehash, global で、好きなバージョンを使えるようになる rbenv which ruby と入力すると、確かに、versions の下に、インストールされている! ~/.rbenv/versions/2.6.5/bin/ruby 最近はMacのデフォルトシェルはzshになってるからそれで嵌るやつは嵌る obj.sort(str) みたいなのがあって、引数がリストなど受け付けないとき obj.sort(str_1).sort(str_2)みたいに書いてるんですがバカっぽいです なにかいい書き方はありませんか? バカっぽい以前に何をしたいのかよくわからん 安定ソート前提なの? >>336 objとstrがどういうものかによる built-inのsort()/sorted()を使ってDictionaryを複数キーでソートしたい場合は sorted(obj, key=lambda x: (x[‘str_2’], x[‘str_1’])) obj.sort()が独自の比較ロジックを実装してるなら それを比較関数として切り出してsort()/sorted()に渡す チームメイト(そのソフト作成者)に相談したら返事もらえたのでまずそのとおりにしました python -m pip install pyenchantで 3.0.1 が無事インストールできました >>330 ERROR: Package 'pyenchant' requires a different Python: 2.7.13 not in '>=3.5'と言われました >>332 conda install -c xrysoflis pyenchant==1.6.6しましたが The environment is inconsistent, please check the package plan carefully The following packages are causing the inconsistenc- - https://repo.continuum.io/pkgs/free/osx-64::ipython==4.1.2=py27_1 (同じようなものが何行も) failed with initial frozen solve. Retrying with flexible solve. Solving environment: - でこれ以上進まなくなりました >>333 残念ながら今の私には理解できません >>334 私のはbashのままのようです 早速インストールした環境を使ってそのソフトを動かしたところ、 SyntaxError: invalid syntaxと言われました。 チームメイトによるとそのソフトはmacで起動確認してないので動かないのかもしれないそうです ええ… 幸いwindows ならその人が全部やってくれそうです 質問に答えてくださったみなさんありがとうございます 勉強になりました。特に==を<に書き換えるあたりは興奮しました もし補足やうまくいきそうな方法があればまだ見てますのでお願いします いつもありがとうございます。こちらで回答をいただきながらスクレイピングを行っている者です。 個別でURL、タイトルなど取得し無事に出力することができたのでページ内の全URLを出力してみたところ、 予定では別々な25件のURLが出力されると思ったのですが、 同じURLが220件出力されてしまいました。原因はenumerateの使い方が間違っている。 取得する場所が間違っているからだったりするのでしょうか? import requests import re from bs4 import BeautifulSoup page_url ="https://news.yahoo.co.jp/topics/top-picks" ; r = requests.get(page_url) soup = BeautifulSoup(r.text, features="html.parser") item_list = soup.find_all(class_=re.compile(r"newsFeed*")) for num,item in enumerate(item_list): news_url = news.find(class_="newsFeed_item_link").get("href") print("num:", num) print("url", news_url) print("*" * 100) >item_list = soup.find_all(class_=re.compile(r"newsFeed*")) それは正規表現か? そりゃ、完全一致じゃないから、かなり多くのclass が該当するはず >>340 とりあえずIPythonとかのREPLで確認しながらやれ item_list = soup.find_all(class_=re.compile(r"newsFeed*")) の後にREPLにitem_listとタイプしたり、len(item_list)とタイプしたり、item_list[24]とかタイプすれば 中に何が入ってるか、何件取得できてるか、思ったものが取得できてるかを確認できる 試行錯誤しながらいいけど CSSセレクター勉強して欲しいものを取得できるようにならないとスクレイピングとか無理よ item_list = soup.select('li.newsFeed_item > a.newsFeed_item_link') スクレイピングは、他人が作ったソースコードを解析するから、かなり難しい。 なぜかと言うと、作者は仕様を知っているけど、解析する方は知らないから。 答えを知ってる者には簡単だけど、知らないとかなりの時間を損する! 初心者は、やめておいた方がよい 作者の仕様を予想するのと試行錯誤で、かなりの時間を損するだけで、 全くプログラミングが上達しないから! 自分で、練習用のサイトを作った方がよい スクレイピングは、プロでも無料ではやらない。 他人の滅茶苦茶なソースコードを見ても、何も学ぶことが無いからw 単純に時間の無駄 Web技術はこまごましてて難しすぎるんだよな CSSセレクターって何だろうと思って調べてみたが理解できなかった >>341 正規表現です。該当してる中から取得するやり方ではいけないんですね。 >>342 わかりました。セレクターも入力してみて何が取得できるのかなど一通りやってみます。 >>343 基礎学習の後にスクレイピングがおすすめと記載されていることもあるので簡単な方だと思っていました。 よく見るサイトやフリマ系など必要なデータを取れるようになれば時間の時間の短縮になると思いましたがそのレベルになるのは難しそうですね… 皆さまご丁寧にありがとうございます。参考にさせていただきます。 自分で書いた、HTML をスクレイピングすればよい。 そうすれば自分が仕様を知っていて、色々いじくれるし、 自分のPC 内で、何回でもテストできる 他人の作ったページは、いじくれないし、ほとんどが無駄な部分。 しかも、作者だけが知っている仕様を解析・予想するのに、かなりの時間が掛かる 普通は仕様書・設計書から、実装を作るけど、 逆に、実装から仕様を予想しちゃいけない! これは、自然とは逆方向に向かうから、非常に難しい。 だから、リバースエンジニアリングは、無料ではやらないわけ それに、かなり時間を掛けて、作者だけが知ってる答えを見つけても、何にもならないw 他人のアプリの仕様なんて、人それぞれだから、参考・勉強にならない。 自分が作る仕様と無関係 最終的には他人の作ったサイトから情報を抜き出せるようにならなければ意味がないけどね。 スクレイピングは試行錯誤してれば急にサクッとできるようになるから パズルみたいなものだと思って楽しめばいいよ utf-8でpythonから出力したファイルをExcelで開くと文字化けします 確かExcelはBom付きで保存しなおせばいいと思って、 メモ帳で開く→utf-8Bom付きで保存→Excelで開く をしても相変わらず文字化け 前は同じ出力ファイルを開けたのですが、なにか抜けているのかなぁ? >>351 1嫁 > ◆エラーを解決したい場合は、表示されてるエラー全文(勝手に省略禁止)と > 実行環境(Pythonのバージョン・OS名・IDEの種類とバージョン)をシッカリ書くこと。 +うまくいかないファイルとやらにだけ日本語含まれてたりしないか? >>352 すいません 自己解決しました Pyhotn側のコードを何度かバージョンアップするうちに、 ヘッダーが壊れていました 大変失礼しました java遅くて嫌いなのにnode.js仕方なく入れたら旧式Python入れられてパスまで通されたわ encoding='utf_8_sig' とすればBOM付きになってそのままExcelで開けるんですね 今までの苦労はなんだったんだろう・・・ >>347 基礎の後に実践としてスクレイピングがオススメなのは間違いないよ コレクション処理、テキスト処理、ネットワークI/O, ファイルI/O等 アプリケーションプログラミングにおいてコアとなる概念を学べる それにYahooは比較的スクレイピングフレンドリーな作りだからいいチョイスだと思うよ CSSセレクターみたいに1~2日で学べるような知識は 必要になったその都度身につけていけばいいんだけど 問題なのは何が間違ってるかを自分で調べる方法をほぼ持ってない事 まともにプログラミングできるようになるには 何が間違ってるかだけじゃなく 何が間違ってるかをどうやって調べればいいのかを知ろうとするマインドが決定的に重要 >>339 condaでinstallする前にpipで(サポート外の)3.0.1を入れたからじゃない?(でもよく入ったね?) エラーメッセージ読めばわかると思うけど、環境の不整合が起きてるんだと思う >SyntaxError: invalid syntaxと言われました。 pyenchantは3.0.0からpython2のサポートしてないのでpython2.7ではpyenchant 3.0.1入れても不具合でるんじゃないかな https://github.com/pyenchant/pyenchant/releases/tag/v3.0.0 例えばpython3から導入された(python2に対応してない)構文で書かれているコードをpython2で動かすと、対応してないのでSyntaxError(構文エラー)が出るということはありうるよ もちろん、チームメートの人が言うようにOSの問題かもしれないけど とりあえず、環境構築の質問はそのチームメイトにした方が確実だよ HTMLのスクレイピングは簡単だが JavaScriptだと一気に難しくなる コロナの自粛期間を利用してPythonを勉強し始めました。 下記のCのコードをPythonに変換しようと思ったのだが いきなりforループの書き方でハマってます。 ご教授お願いします #include <stdio.h> long combi(int,int); int main() { int n,r; for(n=0; n<=5; n++){ for(r=0; r<=n; r++) printf("%d C %d=%ld",n,r,combi(n,r)); printf("\n"); } } long combi(int n, int r) { int i; long p=1; for(i=1; i<=r; i++) p=p*(n+i+1)/i; return p; } def combi(n,r): __p = 1 __for i in range(1,r+1): ____p = p * (n-i+1) // i __else: return p for n in range(1,6): __for r in range(n+1): __print(f"{n} C {r} = {combi(n,r)}") どうでもいいが元のコードのcombiは式が間違ってると思う for n in range(1,6): __for r in range(n+1): ____print(f"{n} C {r} = {combi(n,r)}") のミス >>363 Cって、forearchないんだっけ?あれと一緒よ CできるのにわざわざPythonを学ぶ意味がわかんねえ PythonにできてCにできないことはないだろ >>367 > Cにできないこと コンパイラ要らずの安易さ。 Cの他に何でもいいから適当なスクリプトは出来るといいと思う。 >>367 できればいいって言うわけじゃないだろ 「簡単に」できるとか「安全に」できるとか「わかりやすく」書けるとかも重要だし >>358 今pyenchant3をアンインストールしてから pip install pyenchant==1.6.6してそのソフト実行したらsyntaxerror 出なくなりました そして.dll: unknown file typeと言われました ソフト作成者に言ったら「気づかなかった」と言われました 以上です。本当にありがとうございました >>368 それは IDE にそういう機能を付ければいいだけの話 Java とかコンパイラが必要だが、eclipse を使えば 特にコンパイラのわずらわしさはない >>363 >>364 ご教授ありがとうございます。 Pythonのforループの書き方がちょっと独特ですね。 ご指摘いただきましたcombiの式、確かに間違ってました(笑) 正:p=p*(n-i+1)/i; >>336 class my_obj: def sort(self,tgt): if type(tgt) is list: for i in tgt: 〜〜〜 elif type(tgt) is str: 〜〜〜 こんな感じでどうっすか? やはりその形ですかー 同じメソッドならチェーンでない方法で連打できないかなと思ったのです。引数に無理やりイテレータぶち込むみたいな >>375 何をしたいコードなのかよく分からないがエスパー力すごいな こーゆうエスパーが勝手に要件勘違いしてバグ仕込むんだよなー プログラム言語のPythonを大学でやることになりました Pythonの一般的な言語に対しての欠点を教えてください また文法が簡単に書けるのは豊富なライブラリがバックにあるためだと聞きました 何でもかんでもライブラリ頼りになることはなんか弱点というか危険なこととかはありませんか? すいませんが教えてください 型の宣言をしないから型というものの意識が非常に弱いプログラマーとなる。 C#などでjson受ける為のclassなど書けるレベルにならないと駄目。 ・相対的に遅い(ライブラリ使ったら大抵はそこそこ〜かなり速い) ・コンパイラ型の言語に比べて型システムがゆるいので移行するのが面倒くさい(必ずしもする必要はない) ・exeファイルに固めるのが苦行(これは本当に欠点) 職業プログラマを目指さないならどれも全くどうでもいい問題 ありがとうございます Pythonは特段優れた言語ではなく 現在評価されているのはライブラリがたまたま現在需要がある AI関連のヤツが充実してるからと聞きました Pythonは廃れる危険性は薄いですか? C言語やJavaと仮に一本でやるにはどれがいいですか? >>384 本職目指すなら一本に絞ること自体ナンセンスだから取っつき易いのから始めて全部やれ。 研究の道具とかで何らかプログラミングができるようになりたいというなら、具体的な用途を示さないとどれが適切かは分からない。 言語本体だけで見ればその中でpythonは遅い方だが用途によっては全く問題ない速度が出たり、他の言語で作るより速いものが作りやすいこともある。 >>385 オープンソースソフトの未来は誰にもわからない 開発コミュニティがやる気を失ったりケンカ別れしたらそれでおしまい これから言語はたくさん経験するんだから、とっかかりとして気楽にやればいいよ 得意分野違ったり何やるかにもよる javaとかループする計算早い!とかいいながらGUIクソ遅いし 教えてもらえませんか? 任意の場所に多角形があって 多角形の辺を3cm、4cm、3cm、4cm.....と多角形を大きくする感じにしたいのですが 多角形の頂点を角度に合わせて計算して膨張させたつもりが 図形が移動するだけになってしまいました vertはそれぞれの頂点座標です 移動する長さの計算は合っているんですが 元の座標がマイナスになったときにうまくいきません どうしたら膨張させる様に頂点の座標を計算できますか ↓自分が作ったのはこれです from mathutils import Vector for v in vert: ___p=v+Vector((3,4)) ___print("新しい座標は",p) >>392 ありがとうございます! 割合で計算し直してみます たすかりました! >>380 基本的に欠点が少ないから普及してる 型付けについては長所短所は裏表で 動的言語と静的言語は一長一短になる ただ両方使えるに越したことはない しいて言えば内包表記とか表記がやや煩雑で Rubyの方が書きやすいと個人的には思うが AIライブラリが充実してるからみんな使ってる >何でもかんでもライブラリ頼りになることはなんか弱点 そりゃ何でもライブラリ頼りなら プログラミングが上達しないことが弱点なんじゃないの? 一方で車輪の再発明すると時間を浪費するのも事実だけど Intel Distribution for Python って実際どれぐらい速いんですか? >>384 >AI関連のヤツが充実してるから 流行したのはそれが大きいだろうけど >Pythonは特段優れた言語ではなく いやそこそこ優れてるとは思うけどね? 他の言語と比べればわりと書きやすい方 同じ動的言語でもPerlやPHPやJavaScript より書きやすいんじゃない?(Rubyが一番だけど) >Pythonは廃れる危険性は薄いですか? 薄い もし将来廃れるとしても 十年、二十年は持つだろう >C言語やJavaと仮に一本でやるにはどれがいいですか? PythonやってればCやJavaもそこそこ書けるはず CのポインタやJavaの静的型付けでつまずく かもしれないが多くの基本は共通している まず易しい言語のPythonを ちゃんと読み書きできるようになろう! Pythonは何で短い行で他の言語と同じ命令ができるのですか? (例えばプリントメソッドなど) 裏で妖精さんたちが頑張ってくれてるから それと引き換えに妖精さんにわかる言葉でお話する時間だけ処理速度が遅い >>398 妖精とは? ライブラリとはまた違うんですよね? >>397 一言で言うとPythonの中に命令が書いてあるから 妖精は心がきれいな人にしか見えないんだよ ライブラリは心が汚い人でも見える >>400 そうなのですか でもじゃあなんで他の言語じゃそういう仕組みがないんでしょうか >>402 それはPythonがわりと若い言語だから 同期のRubyも同等の短い命令で書ける Goもやってみたいけどライブラリが少ないからなぁ、kivyみたいな便利なものが欲しい >>403 短い命令で書ける代償に何か遅いとかある? あるよ 妖精さんのMPが尽きたら動かなくなっちゃう >>397 プリントなんてどの言語も大差ないと思うけど どんなコードを見ていっているの? public class HelloWorld { public static void main(String[] args) { System.out.println("hello, world"); } } Javaはいちいち大げさすぎる Pythonとは文化が全く違うのでこのスレ民には用無し Javaは大規模開発に向いている 小規模でちょこちょこやりたいなら、Pythonで十分 しかしpythonのself地獄はいかんともし難い となるとpythonはそれ用には作られてないのではと思ってしまう simulationライブラリで純粋な関数式プログラミングをする ttp://x0000.net/topic.aspx?id=3631-0 UIライブラリ (C#, 2D) を作ったよ ttp://x0000.net/topic.aspx?id=3688-0 学術巨大掲示板群: アルファ・ラボ ttp://x0000.net >>412 そらそうよ Pythonのオブジェクト指向機能は後付けだからな 最初から純粋なオブジェクト指向言語として作られたJavaとはモノが違う >>405 Pythonは遅い言語だよ? 部分的にトレードオフがある 型を書いた方が早いとか >>414 JavaよりRubyの方がより純粋なOOP言語だよ 後付けというかJavaScriptと同じプロトタイプだからな。 JavaScriptのthisとPythonのselfどっちがマシか? >>415 でも主要な所はライブラリでCで書かれたのを使うから 実質は速いから問題ないっていう声も聞くんですが グダグダ言ってないで書いてpythonのできる範囲内ではどうやって遅いと思うなら他の言語に移植すればいい その程度のスピードは出る 最初から世界最速目指さないと死ぬっていうなら別の言語のほうがいいが >>397 > 短い行で他の言語と同じ命令ができる そうとは限らない。 >>418 高速なライブラリがあるから、それを使う処理は高速にできる。 pythonという言語自体は他の言語に比べて相対的に遅いから、pythonで記述した処理は相対的に遅いから遅い。ただその遅さが許容できる範囲内かどうかは要件次第。 何も矛盾はしてないぞ。 要はケースバイケースなんだから、単に遅いとか速いとかバカな理解のしかたをしないで、正しく使い分ければいいだろ。 プログラミングせずに口だけ動かしてたら妖精さん逃げちゃうよ! Java 系と python 系では思想が違う Java はなんでもちゃんと書くという思想 python はなるべく書かないという思想 それだけのこと 長所、短所は何とも言えない んな思想はない Explicit is better than implicit. >Explicit is better than implicit. この考え方も後付けなんだよね 遅い早いとかおまえらのレベルじゃ気にするレヴェルじゃねーだろ >>427 全くの別物だけど、どういうところが紛らわしいと思うの? >>429 スルーしてたけど全く別物でワロタwww ありがとうございます。こちらで教えていただいたおかげで無事に1ページ目のURLやタイトルを取得し出力することができました。 今はページを遷移して全ページのタイトル、URLを取得しようとして、次へのURLは取得することができたのですが 最後のページは次がない為苦戦してます。get_htmlメソッドで別のページのhtmlを解析している動画があったので私も使ってみたのですが、 なぜか使えずNameErrorになってしまいました。何が原因なのでしょうか?get_htmlメソッド以外にもラストページのhtmlを解析できる方法がありましたら教えていただければ幸いです。 質問がわかりにくく申し訳ございませんが、宜しくお願いします。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる