-
プログラム
-
くだすれPython(超初心者用) その34 [無断転載禁止]©2ch.net
-
UPLIFTで広告なしで体験しましょう!快適な閲覧ライフをお約束します!
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。
エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。
騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。
次スレは >>985 辺りで
前スレ
くだすれPython(超初心者用) その33
http://echo.2ch.net/...cgi/tech/1490424742/ - コメントを投稿する
-
>>1
乙 -
関連スレ
Pythonのお勉強 Part53
http://echo.2ch.net/...cgi/tech/1494683284/
◆関連リンク Python の Home Page
http://www.python.org/
◆長いコードはこういうところにはってください
http://ideone.com/
http://codepad.org/
http://pastebin.com/
http://dpaste.com/
https://try.jupyter.org/
◆まとめwiki
http://python.rdy.jp/
ネットにはデマ情報がいっぱい残ってるので正しい情報をメモ
cmd で UTF-8 使える方法 (chcp 65001 について) http://nazochu.blogs...08/blog-post_26.html
mintty http://dogmap.jp/2011/11/15/mintty/
mintty http://tanakh.jp/pos...indows-terminal.html
↓
色々紆余曲折あったけど Git インスコして GitBash 使うのが一番楽っぽい
https://git-for-windows.github.io/ -
関連スレ
Matplotlib でグラフプログラミング【Python】
http://echo.2ch.net/...cgi/tech/1256385982/
ディープラーニング
http://echo.2ch.net/...tech/1457792560/(DAT落ち)
人工知能ディープラーニング機械学習のための数学
http://echo.2ch.net/...cgi/tech/1482808144/
【統計分析】機械学習・データマイニング15
http://echo.2ch.net/...cgi/tech/1492344216/
【Python】Python Webフレームワーク総合スレ
http://tamae.2ch.net....cgi/php/1329996601/
【Python】TurboGearsスレ Part 1【Framework】
http://tamae.2ch.net....cgi/php/1176022606/
Google App Engine for Python 6アプ目
http://tamae.2ch.net....cgi/php/1358570953/
Python CGI
http://tamae.2ch.net....cgi/php/1163513344/ -
5年以上前の過去ログへのレスですw
http://toro.2ch.net/...cgi/tech/1322115727/
> 113 :デフォルトの名無しさん:2011/12/07(水) 15:17:31.93
> ある本に書いてあったのですが、
> from math import sqrt
> psqrt(pow(4.5-4.2,2)+pow(1-1,2))
> のようにすると、
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> NameError: name 'psqrt' is not defined
> のようなエラーが出ます
> これはどのようにすればいいのでしょうか?
この書籍はオライリーの『集合知プログラミング』(初版)だと思われますが、
同じエラーを経験しましたが、これは見ての通り
文脈からしてpsqrtをsqrtに直せばいいだけだと思いますが、
そもそもpow関数の引数に入れる値が間違っているようです。
この書籍の正誤表がネット上にあります。
https://sites.google...tintelligence/errata
この正誤表の訂正前の記述もこの初版とは異なりますので要注意。 -
条件がTrueの時はABC、条件がFalseのときはBCのように
(A)BCの(A)の部分を条件で追加したいのですが
test = [['あいうえお', 'アイウエオ', 'ア'], ['かきくけこ', 'カキクケコ', ''],
['さしすせそ', 'サシスセソ', 'サ'], ['たちつてと', 'タチツテト', '']]
result = []
for i in test:
x = ''
if i[2]:
x += '【{0[2]}】\n'.format(i)
result.append(x + '{0[0]}\n{0[1]}'.format(i))
print('\n\n'.join(result))
これを内包表記で作成したいのですが
result = ['【{0[2]}】\n{0[0]}\n{0[1]}'.format(i) if i[2] else '{0[0]}\n{0[1]}'.format(i) for i in test]
条件でformatを切り替える以外に方法ありますでしょうか? -
おまえ向いてない
-
>>6
result = ['\n'.join(( '【' + i[2] + '】', i[0], i[1])) if i[2] else '\n'.join((i[0], i[1])) for i in test]
print('\n\n'.join(result)) -
アンカ違ってた。>>6ね。
-
>>6
def trans(s):
if s[2]: return '【' + s[2] + '】', s[0], s[1]
return s[0], s[1]
result = ['\n'.join(trans(i)) for i in test]
print(*result, sep='\n\n') -
>>8,11
ありがとうございます。
参考にさせていただきます。
>>9
条件で文字を表示あり・なしみたいなのができたらいいなと思って
最初に内包表記で作ったのが
result = ['【{0[2]}】\n'.format(i) if i[2] else '' + '{0[0]}\n{0[1]}'.format(i) for i in test]
うまくいかなくて
いま試しにかっこつけてみたら思った通りになったんだけどかっこって大丈夫なのか?
result = [('【{0[2]}】\n'.format(i) if i[2] else '') + '{0[0]}\n{0[1]}'.format(i) for i in test] -
リストにしなくてもこれでいけそう
flag = True
test = 'あいうえお' + ('かきくけこ' if flag else '') + 'さしすせそ'
print(test)
どうもありがとうございました。 -
そこにこそformat()だろ。
test ='あいうえお{}さしすせそ' .format('かきくけこ' if flag else '') -
きれいだ
-
どなたか、解決法を知りませんか?
-
多分無理
-
そこを何とかお願いします
最初の1秒の間にエンター押したら起動後に消えてくれます -
端末のプロセスをキルしたらいけるか?
-
>17
tesut
じゃなくて、
test
って書いてほしい。
import os
import signal
input("hit Enter to close the console")
is.kill(os.getppid(), signal.SIG_DFL)
これでターミナル閉じたよ。wundows -
>22
is.kill
じゃなくて、
os.kill
誤字すいません。 -
wundows
-
重ね重ね、誤字ばかりで、申し訳ない
-
d を辞書としたとき、
for k in d.keys():
と
for k in d:
は等価ですか?
等価だとして、どちらが早いですか? -
そこの速度差は誤差でしょ
-
>>26
dからkeysを探して呼び出す手間が入るから等価ではない、速度差は上にも書いてある通り誤差だろうが -
>26
disっていう標準モジュールで、バイトコードを逆アセンブルした結果を見れるよ。
既に指摘のある通り、
d.keys()だと
LOAD_ATTR
CALL_FUNCTION
が余計に入る。
実行時間は、誤差の範囲と思う。 -
D1, D2 は集合。
D = (D1, D2) は M のインスタンス変数。
d は辞書で、 M のインスタンス変数。
for r in M.D[0]:
■■for c in M.D[1]:
■■■■if (r, c) in M.d:
というようなコードを↓のようなコードに置き換えると、
for ループのループ回数が多いとき、少しは速くなる
でしょうか?
ケースバイケースだとは思いますが、↓のような方法で
少しは速くしようなどと考える人はあまりいないでしょうか?
D1 = M.D[0]
D2 = M.D[1]
M_d = M.d
for r in D1:
■■for c in D2:
■■■■if (r, c) in M_d: -
>>31
俺ならitertools使う -
>>31
やってみりゃいいじゃん -
冗談きついぜ
-
大差ないと予想
-
>>31
for name in expr:のexprは最初の一度だけ評価されてイテレーターになるので
ローカル変数にexprの結果を割り当てても、その手間分コストが増えるだけじゃないかな
http://docs.python.j...ml#the-for-statement -
当たった
-
あ、でもやっぱり B は毎回評価されるような気がします。
例えば、↓のようなコードを考えると B は毎回評価されないとダメな気がします。
for i in A:
→ここで B を変更する
■■for j in B: -
超初心者はパフォーマンスなんか気にするなよ
-
何十万回もループを回すような場合だと、ローカル変数への割当は、数十ミリから数百ミリ秒の高速化になった記憶がある。
あと、ネストしたリストへのアクセスは遅いので、
a[m][n]に二重ループでアクセスする時は、
am=a[m]
と1つめのループの中でしておいてから、
二つ目のループの中では、
am[n]としてアクセスした方が、速くなる。
これは、ループが1000回くらいでも、ミリ秒単位でちゃんと差が出る。
もちろん、index使ってのアクセスよりも、
for elem in lst:
としてイテレータ使う方が速い。
profiler使うと、関数単位でどこに時間が、かかっているか分かるので、オススメ。
SpyderとかのIDEに組み込んであるのが使いやすいと思う。
高速化に興味があるなら、ハイパフォーマンスPythonっていう本がオライリーから出てるから、参考にしてみては? -
パフォーマンスよりpythonらしい書き方かどうかを気にすべき
-
>>17-23
プロセスには親子関係がある。
端末からPythonを起動すれば、親は端末で、子はPython
親を終了すれば、子も強制終了されるから、正常な終了ができない。
メモリ上にあるデータが、保存されないかも
普通サーバーなどは、デーモン化して、親プロセスをなくす。
そうすれば、親が終了しても、無関係だから安全 -
for a in [1,2,3,4,5]:
[tab]print(a) ←インデントする
print("こんにちわ") ←インデントしない
「python入門教室」のサンプルでこんなコードがあって、
インデントしない部分は繰り返されませんよみたいなことを教えたいようなのだ
普通にこんにちわを続けてインデントしなかったせいで
SyntaxError: invalid syntax って出て実行できないんだが。
これって本がおかしいですよね?
ちなみにコマンドプロンプトでやってます -
>>46
たぶん対話シェルへの入力としては間違っているという話ではないかと
インデント潰れるけど対話シェルのプロンプトを再現するとこういうことだよね?
>>> for a in [1,2,3,4,5]:
... print(a)
... print("こんにちわ") # ...(二次プロンプト)の部分にインデントを下げて入力した
File "<stdin>", line 3
print("こんにちわ")
^
SyntaxError: invalid syntax
>>>
print("こんにちは")はfor文とは独立した文だから>>>の行に入力しないとエラー
対話シェルの仕様による制限なので(pythonの構文としては間違ってない)本の説明不足かなあ
これwebのドキュメントにも詳しくは載ってないな、分かりにくいね
https://docs.python....ial/interpreter.html -
>>47
ありがとうございます。
本だと、こんにちわをfor文に組み込んだら
1
2
3
4
5
こんにちわ
みたいな結果が出ると書かれてました。
わかりづらいので該当部分載せます
http://i.imgur.com/V46Hrjy.jpg
http://i.imgur.com/xzyC4jE.jpg -
もしかして、メモ帳から作成したファイルなら実行できるとかですか?
-
>>49
(メモ帳がpythonに適しているかは疑問だけど)できます
ページの上のほうにexample-04-03-01.pyとファイル名が書かれてるので
スクリプトファイルの編集&実行を前提にした(not対話シェル)項目っぽい -
http://docs.python.j...-towards-programming
>複合文を対話的に入力するときには、(パーザはいつ最後の行を入力したのか推し量ることができないので) 入力の完了を示すために最後に空行を続けなければなりません。
>>49
はい -
メモ帳は、プログラミングに使えない
メモ帳で保存したテキストには、
BOM(Byte Order Mark)という余計なデータが付くから、正常に実行できない
TeraPad など、他のエディタを使うべき -
>>51
この本、最初のほう飛ばし読みして分かったのですが、すべてIDLEで学習していく本みたいです・・・。
しかし、IDLEでも結果はエラーになりました・・・。
>>> # coding:utf-8
>>> for a in [1,2,3,4,5]:
print(a)
print("こんにちは")
SyntaxError: invalid syntax -
>>54
IDLEのshellじゃなくてFile→New Fileでエディタ起動してコード書き込んで保存してF5押せばいい -
>>55
エンター押しても空行になりませんでした... -
そもそもコマンドプロンプトで出来ないコーディングとシェルでしか出来ないコーディングがある時点でパンクしそう..
-
あ、new fileでやったら動きました
ありがとうございました...
失礼しました -
>>57
エンターを押した時点でforループが実行(完了)される。
>>> for a in [1,2,3,4,5]:
... print(a)
...
1
2
3
4
5
>>> print("こんにちは")
こんにちは
プログラミングやるならエディタで作成したファイルの文字コードは認識しとかなきゃダメ。
とりあえずUTF-8選んどけ。 -
ってか、>> ID 8pr90v8J は
Android 5.0(Lollipop)を搭載したNexus 5
使ってるのか……。 -
バージョンアップしてたらAndroid™ 6.0か……
どちらにしろ誤爆なので、見なかった事にして下さい -
>>53
横だけどAtomをいれてみた。便利そう -
お前、流石にその(画像は)引くわぁ〜
音楽もアニソンばかりだし、せめて水樹の曲入れるなら、田村の曲ももっと入れとけよ
花澤の再生回数だけ異様に多いな -
第二の照井君とはならなかった
-
もうどこの誤爆か書いてけや
-
オライリーのpython入門 不親切すぎる・・・
-
誤爆
携帯の解像度から機種を特定→別スレから大学生と推測→携帯の販売時期を検索
→大学3〜4年と推測→ちょうど、nexus7 2012の修理方法を調べてた
→正規復元方法を試す→不可→バッテリー交換しても電源が入らない→充電口の破損を確認→スイッチの異常か
基盤の異常かどちらか迷ってる→強い衝撃を与えたと聴いてる→どこスレで聞くか迷ってる間にアニソンすれに書き込み
かと、思ったが、まさかのアニソンスレと誤爆 -
最後の文はpythonスレです
-
>>71
python3入門にしなさい -
プロジェクトごとにパッケージ分離したくてvenv使うとこまでは分かったんだけど
どういう名前でどこに置くのが一般的?
みんなプロジェクトのルートに「env」とかでおいてるんですかね -
l がリストのとき、
if e in l:
を多用すると極端に遅くなるんですけど、もしかして、線形探索して探していますか?
s = set(l)
if e in s:
としたほうが速いですか?
もしそうだとすると、自動的に
if e in l:
と書いたとき、 l を集合に変換して検索してくれればいいのにと思うのですが。 -
setは順序を保持しないから、テストケースで失敗する事も有る
最後に結果をソートしても良いなら、気にしなくて良いんだけど……。 -
うせろガイジ
-
こわ〜い
-
>>82
OrderedDictをどうやって使うつもりや?言うてみい? -
Philip N. Kleinの『行列プログラマー』を読んでいて、はまっています。
M は行列を表わすクラスのインスタンスです。
M.D == (M.D[0], M.D[1])
M.D[0] は行列 M の行のインデックスです。
M.D[1] は行列 M の列のインデックスです。
M[i, j] で行 i、列 j の要素にアクセスできます。 -
M.D[0] == M.D[1] で、行列 M は対称行列です。
↓の二つのプログラムは、同じ動作をすると思ったのですが、
(1)は正しく動作せず、(2)は正しく動作します。
なぜだかさっぱり分かりません。なぜ(1)と(2)で異なる動作をするのでしょうか?
(1)
S = set()
for i in M.D[0]:
■■for j in M.D[1]:
■■■■if i == j:
■■■■■■continue
■■■■elif i > j:
■■■■■■t = i
■■■■■■i = j
■■■■■■j = t
■■■■S.add(((i, j), M[i, j]))
L = list(S)
L = sorted(L, key=lambda e: e[1])
(2)
S = set()
for i in M.D[0]:
■■for j in M.D[1]:
■■■■if i == j:
■■■■■■continue
■■■■elif i > j:
■■■■■■S.add(((j, i), M[i, j]))
■■■■else:
■■■■■■S.add(((i, j), M[i, j]))
L = list(S)
L = sorted(L, key=lambda e: e[1]) -
六本木 ネットベンチャー系 2017年春の陣
http://file.takanori...yo170301roppongi.png -
最後のelse文で i > j で無い。から
-
ループ変数の値をループ内で変更するとまずいとかそういうことはありますか?
-
もっと問題をシンプルにしてみましたが、やはり理解できない現象が
発生します。
なぜか(1)と(2)で結果が違います。これは同じになりそうですが。。。
(1)
S1 = {1, 2, 3}
S2 = {1, 2, 3}
for i in S1:
■■for j in S2:
■■■■t = i
■■■■i = j
■■■■j = t
■■■■print((j, i))
(2)
S1 = {1, 2, 3}
S2 = {1, 2, 3}
for i in S1:
■■for j in S2:
■■■■print((i, j)) -
(1)の結果:
(1, 1)
(1, 2)
(2, 3)
(2, 1)
(1, 2)
(2, 3)
(3, 1)
(1, 2)
(2, 3)
(2)の結果:
(1, 1)
(1, 2)
(1, 3)
(2, 1)
(2, 2)
(2, 3)
(3, 1)
(3, 2)
(3, 3) -
iを内側のループで書き換えているのだから、当然そうなる。
-
>>86
尼のレビューがひどいけど、線型代数はプログラムと別に学んだほうがいいぞ -
pyautoguiを使った作業の自動化について教えてください。
以下の作業の自動化を試みています。
1.あるアプリケーションでファイルを読み込み、処理を行う
→2.(処理を終えるまで待つ)
→3.次のファイルで同じことをする(以下繰り返し)
2.の段階では現状、ファイルのサイズに合わせてsleep関数で調整していますが、
それだと、ちょっとした処理の遅れでタイミングが狂ってしまい、
以降の動作がうまくいかなくなる問題があります。
処理が終わって「クリックやキーボードなど、操作できるようになったよ」という
状態を認識する方法ってありますか。 -
対象プログラムの実装によるから汎用的な方法はないですな
-
解決法としては、どんな(余分な)処理をしても、あり余るsleep時間を設けてループさせる
処理終了後に画像やメッセージを呼び出して、認識させてから次に移る(フラグの受け渡しとか?)
どんな処理か具体的に上げてくれないと解らない -
>>98
処理の内容は、ほとんど上記に書いた程度です。
音源から指定周波数の音を抽出するアプリがあり、
アプリ上のあるボタンをクリックすることで変換作業が行われます。
そこで新たに変換後ファイルが生成され、同時に10秒ほど処理待ちでフリーズ?して、
操作可能になったら次のファイルへ移ります。
>処理終了後に画像やメッセージを呼び出して、認識させてから次に移る(フラグの受け渡しとか?)
こういう方法ができればいいとは思ってます。
sleepで稼ぐのは必要以上に時間もかかるし、確実ではないので・・・。
「フラグの受け渡し」というのは、例えばどんな処理なのでしょうか。
サンプルコードとかってありませんか。 -
わっちょい注意報
↑今すぐ読める無料コミック大量配信中!↑