くだすれPython(超初心者用) その44【Ruby禁止】
■ このスレッドは過去ログ倉庫に格納されています
当スレに★Python以外のプログラミング言語での回答類を書くべからず★ ☆「Ruby では」「Rubyでは」をNGワード登録推奨 このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。 ★Pythonのソースコードはそのまま5ちゃんにコピペするとインデントが崩れるので ↓等のてきとうなソースコード用う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(超初心者用) その43【Ruby禁止】 http://mevius.5ch.net/test/read.cgi/tech/1555397061/ >>58 を改造して提出したら チートしたのがばればれw >>57 >>37 さんを真似て書いてみましたがエラーで出力されません。 問題です。 標準入力から、1行目に西暦年、2行目に年数が与えられます。この西暦年から始まる、年数分の「西暦年と昭和年の対応表」を出力するプログラムを作成してください。 対応表は、「西暦XXXX年は昭和YY年です」と表示します。昭和年は、西暦1926年から西暦1988年までの期間で、「西暦年 - 1925」で求めることができます。 なお。与えられる西暦年は、昭和年に対応しています。年数も、昭和年を超えることはありません。 1975 10 よろしくお願いします。 まず自分で作ったうまく動かない無様なコードを晒してみんなの笑いものになってからだ。 一体何のためにプログラミングを学んでいるのか理解に苦しむな y = int(input()) n = int(input()) print([ for i in n]) 少しずつやれること増やしていくんだよ ここにはそのために役立つコードいつくか集まっているのだから さっさと実行して身に着けてしまいな 上から目線でエラそうなこと言ってるけど実は全員初心者だから気にするな 適当に人気のある入門書買って勉強すればある程度はいけると思うけど >>61 >>64 がヒントあげてくれているので それと37のヒントを 参考にしてつくったコード(たぶんエラーがでて、望んだようには出力されないだろうがおそれるな)を ttp://codepad.org/ にでもうpって ここにそのcodepadアドレスを貼れ >>66 C言語の超入門の授業(半期のみ、週1コマ)を真面目に受けて、以降は独学 >>61 追記 >>58 氏がおまいのレベルからすると明らかにズルしてるのがバレバレバレレベルの回答を貼ってくれてるので それもよめ Ruby で作った nums = <<"EOT".lines( chomp: true ).map( &:to_i ) # 数字の配列。改行は削除 1975 10 EOT #=> [1975, 10] nums[ 1 ].times do |idx| # 10回ループ puts "西暦#{ nums[ 0 ] + idx }年は昭和#{ nums[ 0 ] + idx - 1925 }年です" end 出力 西暦1975年は昭和50年です 西暦1976年は昭和51年です 〜 西暦1984年は昭和59年です 100GB近くあるテキストファイルを50万行ずつに分割する処理の途中で 誤って処理を止めてしまったのですが、途中(仮に500)からイテレータを始める方法を検討いただきたいです。 ファイルの読み込みはpandasのread_tableでchunksizeを50万で指定しています。 skiprowsを50×10万行で指定したらmemory errorを起こしました。 読み込みだけで一回10秒程度かかるため、dataframeを作成せずにイテレータをインクリメントしたいです。 仮にn行目まで処理したかわかってるならdf[n:]でいいんじゃない エラー吐くなら知らん 何なら最初からやり直したらいいと思う 一行ずつ読んでいって num_of_line += 1 if num_of_line > 500: do_something のようなパーツ挟む UWSC→AutoIT→Pythonで簡単に移行できたからUWSCから覚えてみては! PythonもKivyのGUIから入ったからprintのendオプションとか昨日まで知らなかったわ どうしても Windows でキーマクロしたい時の最終手段がUWSCというイメージ https://i.imgur.com/9syf7Ak.jpg キー入力付近で書くことで抽象化があまりできず ネストも深まりやすい感じが伺える python で済むならpythonで終わらせて キーマクロ言語は触らないほうが良いと思います (vim のキーマクロを書くことがあるが、 同様の理由で異常に読みにくい) >>55 要するに、10回西暦と年号の入力と出力を繰り返したいのか。 しかも西暦から年号の変換をプログラムでしないで手計算とかintにする必要も無い。 forの変数も問題からすると使わない。 (問題自体が学習者を混乱させるクソ問題) ヒントは以下2つ ヒント1 for i in range(10): ヒント2 a = input() print(“西暦” + a + “年“) intじゃなきゃダメとか意味不明な事言って来たら、intにするなら西暦だけ入力にして年号は計算で出せやと文句垂れつつヒント2を以下に変更。 a = int(input()) print (“西暦”, a, “年“) あくまでヒントだから、元にして自分で問題解いてね。 >>81 長文書く前に後のレス(>>61 以降)にも目を通しておこうな。 >>61 あ、勘違い。 最初の西暦と、そこから何年分を出力するかの年数を入力して、年号は計算して出すのか。 んじゃあ a = int(input()) #西暦 b = int(input()) #年数 for i in range(b): print(“西暦”, a + i, “年”) みたいな感じでおk。 授業でforの使い方をどの程度教えているかにも寄るからね。 for i in range(a,b):の形まで教えているなら >>83 のforは for i in range(a,a + b): になるので年号計算の式を短く出来るけど、 その形を教えてないとxとか言われそうだしねぇ。。。 https://i.imgur.com/gJaLQYY.jpg 赤い数字が要素で黒文字は接点の番号です。 それぞれの要素に含まれる接点を自動で求めるコードを作っているのですが、なかなかできません。 結果が配列で出てくるようにしたいのですが、どうすればできるのでしょうか。 要素番号,接点番号1,接点番号2,接点番号3 1,1,4,5 2,1,2,5 3,2,5,6 のように作りたいです。 For文を要素の個数だけ回して、そこからができません。 お願いします。 >>> [(lambda n, x: (n, (x, x+3-6*((n-1)%2), x+4-8*((n-1)%2))))( n, ((n - 1) // 2) + 4 * ((n - 1) % 2) + (n > 4) + 1) for n in range(1,9)] [(1, (1, 4, 5)), (2, (5, 2, 1)), (3, (2, 5, 6)), (4, (6, 3, 2)), (5, (4, 7, 8)), (6, (8, 5, 4)), (7, (5, 8, 9)), (8, (9, 6, 5))] 座標を使えば上手くできる気もするのですが、上手くコードにできません。 ttp://ideone.com/ub4KPl たかがこの程度の問題でここまでするのもどうかと思うが ありがとうございました。 教えて頂いた式の意味をしっかりと理解します。 >>86 こういうお話を一般化するとドロネー分割というのがあるから調べてみると幸せになれるかも知れない http://ideone.com/OkiPYj python よりも 問題の9割は数学的な難易度だ たびたび申し訳ございません。 2つのcsvファイルを組み合わせ、新たに配列を作るのはどうすればよいのでしょうか。 座標csv 番号, x, y 1, 0, 0 2, 0, 0.5 3, 0, 1 4, 0.5, 0 要素csv 要素番号, 接点1、節点2、節点3 1, 1, 4, 5 2, 1, 2, 5 3, 2, 5, 6 4, 2, 3, 6 の2つのリストから 要素番号、接点1の座標、接点2の座標、接点3の座標 1, (0,0) (0.5,0) (0.5,0.5) 2, (0,0) (0,0.5) (0.5,0.5) 3, (0,1) (0.5,0.5) (0.5,1) のようなリストを作成したいです。座標csvには接点の座標が入っており、 要素csvにはその要素に含まれる接点が含まれています。 そこで、要素csvの、要素番号に該当する座標を、座標csvから持ってきてリストを作りたいということです。 配列の扱いがイマイチ理解できません。 配列は1行しか扱えないのでしょうか? まとめてcsvを読み込んでも、最後の行しか表示されません。 教えてください。 >>95 >まとめてcsvを読み込んでも、最後の行しか表示されません そのソースコードうp うp先は>>1 から選ぶよろし https://ideone.com/UlbA6W とりあえず読み込めるようにはなりました。 ここからができません。 具体的に何をすればよいのかがわかりません。 >>95 余計な要素である番号と要素番号消しちゃえ 結果をどう持ちたいのか分らんけどこれでどう? import pandas as pd import pprint # element_path="要素.csv" # point_path="座標.csv" # element_pd = pd.read_csv(element_path, index_col=0, header=0) # point_pd = pd.read_csv(point_path, index_col=0, header=0) element_pd = pd.DataFrame({'x':[0,0,0,0.5], 'y':[0,0.5,1,0] }, index=[1,2,3,4]) point_pd = pd.DataFrame({'point_1':[1,1,2,2], 'point_2':[4,2,4,3], 'point_3':[4,4,4,4] }, index=[1,2,3,4]) element_dict = element_pd.to_dict(orient='index') pprint.pprint(element_dict) point_pd = point_pd.applymap(lambda d: '(' + str(element_dict[d]['x']) + ',' + str(element_dict[d]['y']) + ')') point_list = point_pd.values.tolist() pprint.pprint(point_list) Pythonでdefの前にnumba.jitを書くと速くなるとありますが、これってVSCodeでも速くなるのでしょうか? 手元のVSCodeでjitの有りと無しを何度か比較してみましたが、 全く変わりませんでした。 https://qiita.com/termoshtt/items/d6cf43e777946b3c1d93 JIT って、実行時に、ネイティブ機械語にコンパイルするやつか? こういうのは、10〜100万回以上ループしないと、起動されないだろ ループ回数が少ないのに、コンパイルしたら、 コンパイル時間が掛かるから、かえって遅くなるから ループを万単位でやるような処理にしか効果が無いのですね。 Numpy配列を処理するのに数分〜数時間かかるので、短縮出来たらって思っていたのですが、 ループが数十回程度では意味が無いと。 PythonistaとSiriで遊んでるけど正直やることない Pandasって癖強くない? 一次元配列作るにはpd.Series 二次元配列作るにはpd.DataFrame 要素を参照するときはdf.loc locつけないとdtypeとかまでくっついてくる でもnumpyにはない機能があって便利 クセが強いんじゃあ 癖はあるけどそこまで強いとは思わない (もっと酷いのがあるからね) 行指向と列指向の違いなだけ クセが強いのはむしろ matplotlib の方だと思う Ruby では、 JRuby(Java 実装系)のJIT は、百万回からコンパイルされる。 一千万回(実行時間で、1秒)では、なんと、MRI(C 実装系)よりも速くなる! 早さより美しさがpython 2->3 で遅くなった pandas で df.loc[x] のようにloc内に変数を入れるとエラーが出るのはなぜですか? inputで数字を入れたいのですが、うまくいきません。 >>113 インデックス指定ならlocじゃなくてiloc matplotlibはメインフレーム時代の描画ライブラリを思いだしてしまう 組み合わせの問題で、10個の要素を2個ずつに分ける組み合わせは itertools,combinations(range(10), 2) で出力できますが、10個の要素を1,2,2,5個に分ける組み合わせ というように均等ではない個数に分ける場合、どうやればいいでしょうか? ここでし知りたいのは組み合わせ数ではなく実際の組み合わせのパターンです 10個の要素を1,2,2,5個に分ける組み合わせ数だけでしたら C[10,1]*C[9,2]*C[7,2]*C[5,5] で求まるのはわかりますが、itertools,combinations のようにその実際の組み合わせパターンを出力させたいのです よろしくお願いします 10->5+5 5+5->5+(3+2) 5+3+2->5+2+2+1 で良いんじゃね >>117 再帰なのであまりにも多い要素の組み合わせは出せないけど、これでどうでしょ from itertools import combinations def my_combinations(iterable, rs, tmp=None): r, *rs2 = rs for t in combinations(iterable, r): tmp2 = [] if tmp is None else list(tmp[:]) tmp2.append(t) tmp2 = tuple(tmp2) if rs2: lis2 = list(iterable)[:] for i in t: lis2.remove(i) for r in my_combinations(lis2, rs2, tmp2): yield r else: yield tmp2 if __name__ == '__main__': for t in my_combinations(range(10), (1, 2, 2, 5)): print(t) Pythonを勉強するならWindowsとMacのどちらが良いですか? Linux仮想マシンでやるのがいいけど 苦手なら持ってるマシンで適当にやればいい うbyなら絶対MacだがPythonならどっちでも良い 何でpythonクラスには、privateが無いのよ! ここは開発者のお気持ちを予想するスレッドじゃないのでTwitterで直接聞いてこい そんな思い処理やってないはずなのに処理が重い って時はどうやって測れば良いの? 処理時間てよりどれくらいメモリ使ってるかとかが知りたい あとタスクマネージャで見たpython.exeのメモリ使用量が大きすぎて気になるけどこれ信用していいのかな… ターミナルで実行した時はメッセージを出すための処理をしたいけど、crontabで動かすときはメッセージは不要だからその処理は飛ばしたいです どう書くんでしょうか? どうもありがとうございます なんだか難しそうですね ターミナルかcrontabのどちらで起動させてるかをなんらかの方法で判断して、ifで分岐させればいいのかなーって思ってました if sys.stdout.isatty(): print('hoge') >ターミナルかcrontabのどちらで起動させてるかをなんらかの方法で判断して、ifで分岐させればいいのかなーって思ってました そうだよ 最初にif一回だけ書けばあとは切り替わるのがlogger コードの至る所にif埋め込む積もりだったのか? >>133 、>>134 そうです。いたるところにif書き込まないといけないのかなぁと思っていました。 じっくり調べてみます。 関数A 関数B(Aをターミナルに出力) 関数C(requestsを使ってapiにAをpost) 関数D(時間がかかる処理) があるとします 関数B〜Dの3つをThreading.Threadを使うと 関数Dが動き始まるまで時間が逆に1秒くらい遅くなってしまいました concurrent.futuresだと速度改善出来るかもしれないっぽいんですが、シングルコアのRaspberry Pi Zeroでも早くなりますか? シングルコアだからmax_workersは1にしないといけないと思うので、concurrent.futures使う意味ないですか? pythonでGUI操作で、たとえばネットワーク接続設定で、IPアドレスを入力する欄 があると思うが、これを手入力でなくて、pythonで代わりに入力することは可能? ソースコード的にはどうなるのかな。 Python (Python 3.7)のインタプリタで真偽値に色を付けることって可能ですか? >>> l1 = [1, 2, 3, 4, 5] >>> 3 in l1 True ↑このTrueを例えば緑色にしたいです。 >>136 Windowsだと仮定してpywinautoってのがあるみたいだな linuxなら設定ファイルいじった方が早かろう >>136 windows ならコマンドプロンプトから netsh 使え それでうまく行ったら python からそれを実行汁 windowsでPython動かす時、windowsにpythonインストールするのと、WSLのubuntuにpythonインストールするのどっちがいいんだろ rubyみたいにlinuxの環境にしておいたほうが無難かね やりたいことによる。 windowsのguiアプリ作りたいとかじゃなけりゃ後者でいいんじゃ >>136 Sikuli http://masuo.doorblog.jp/archives/51801518.html ちょっと変わり種 👀 Rock54: Caution(BBR-MD5:f2c519fe5384e767e1c9e99abdcfc293) winにwin版pythonインスコでいい。 pythonはシェアが大きいとわかってるwin版を凄く重視してる。 シェアが大きいとわかってるOSを軽んじる言語は衰退してくから。 WindowsユーザーをコケにしてPython にシェア取られて衰退したRubyの悪口はやめろ! WindowsでPythonはじめたけど便利なライブラリ多くて楽だわ ライブラリ以外の7割くらいctypesで書いちゃってるが 普段遣いのアプレット用にウィンドウズ版 WSLで作業するとき用にLinux版 というか、WSLでubuntu入れれば勝手に入ってた >>140 漏れは、WSL, Ubuntu 16.04 と、1つ前のUbuntu 長期版だが、 Python は最初から入っている which python /usr/bin/python which python3 /usr/bin/python3 file /usr/bin/python /usr/bin/python: symbolic link to python2.7 file /usr/bin/python3 /usr/bin/python3: symbolic link to python3.5 *.pywファイルでno consoleモードを実現できるので、 wsl使ってても、windows版pythonは外せない。 api呼び出せば、wshの代替ができる。 >>148 wsl(ubuntu)ではpython 2.7は入れてない(デフォルトでは入らない)ので、 python3をpythonで呼び出せるようにaliasを設定してる。 >>142 136だが、ウインドウアプリを手動操作することをpythonにやらせたい。手動といっても同じことの繰り返しだから、このルーチンをpython にやらせて楽したい。 >>150 >>138 あるいはVectorとかでマウス&キーボード操作アプリを探せ >>151 僕がやろうとしていることはpython では不向きですか?率直なコメントを >>152 できるが ズブズブの初心者がそこまでできるようになるくらいなら KMmacroの使い方覚える方がずっと短時間で済むぞ 別にマシンスペックが足りないとか、そういう心配はない 向き不向きで言えば、Python自体が初心者にも優しい言語だし ちげーなー わざわざこのスレに質問しにきてるってことは 潜在的にpythonをやりたいんだよ >>152 向いてますよ PythonはGUI操作もうまくできます WindowsにおけるGUI操作基盤であるUIAutomationやWinapiをベースにしたラッパーパッケージが幾つかあります AppiumでWinappdriverを活用する方法もあります 画像認識ベースのOSS Sikulixも有名ですね ただ知っておいて欲しいことはGUI操作がうまくできるからといってそれが最も効率的なやり方とは限らないということです 多くの場合において同じ結果を得るためにGUIを使わない方法があります Pythonから利用するならGUIを使わない方法の方がより効率的です >>149 Debian 10(buster)2019/7/6 では、 python は2.7、python3 は、3.7 だけど ちなみに、Ruby は2.5、Node.js は10.15、PHP は7.3、 Rust も入っていて、1.34 そうか、Ubuntu だけは、python2系から脱却したのか ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる