くだすれPython(超初心者用) その45【Ruby禁止】

■ このスレッドは過去ログ倉庫に格納されています
2019/10/16(水) 10:17:12.96ID:dCHq3Ix4
当スレに★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(超初心者用) その44【Ruby禁止】
http://mevius.5ch.net/test/read.cgi/tech/1563969768/
2019/12/09(月) 17:47:31.97ID:scocuTx7
>>581
それを判断するのはオメーじゃねぇ
(・∀・)カエレ!!!
チネ!!!(・∀・)
2019/12/09(月) 17:56:15.08ID:FD9BPIub
>>582
xとyの値を確認しながらデバッガーでステップ実行するかprintデバッグすればわかる
2019/12/09(月) 19:13:08.22ID:3v06ZNRZ
ありがとう
でもわからない
2019/12/09(月) 20:12:58.55ID:8kuRYSAZ
>>581
もしかしてお前は自分が書いている言語が何なのかすら知らないのではないか?ロジックがどうこう言う手前の段階だろう。
2019/12/09(月) 21:49:55.90ID:m18yM9uO
Windowsの「アプリA」バージョン3が文字列を画面に表示してます
これを「アプリA」バージョン2に対してコピペしたいのですが
二つのアプリは同時に起動することができません

そこで、まずバージョン3を起動して、手に入れたい部分をコピーしてテンポラリー書類にコピーペースト.

入れ替わりでバージョン2を起動して
テンポラリーからコピペしたい部分をゲットして
バージョン2宛にペースト.
そんな工程を目論んでます

テンポラリーファイルには、変数名と文字列、数値が記録されることになると思います

このような手法に適した、ファイルの書き出し・読み込みと言えばどんなものがあるでしょうか?

自分なりにはpickleというものを見つけましたが、なんか難しそうな気がしました
アドバイス頂ければ嬉しいです
2019/12/09(月) 21:53:47.07ID:gL89svw9
クラスの勉強をするかdict型で書き出すかして
そのままpickleにかけろ
それより楽な方法は生データをテキストで保存することだが後々苦労するからやめとけ
2019/12/09(月) 22:18:14.86ID:m18yM9uO
ありがとうございます
dictと、クラスの定義ですね

はて?
pickleって、ひょっとして持っていけるのは要素だけで
変数名とかリスト名とかは持っていけない?
2019/12/09(月) 23:42:57.55ID:Pxm13ZGa
可読性を重視するならjsonもありかと
591デフォルトの名無しさん
垢版 |
2019/12/10(火) 09:42:46.70ID:Gtb8KZ21
可読性ならjsonよりyamlやtomlのほうが…
2019/12/10(火) 13:06:22.84ID:6QYDHDQi
括弧が付いてると可読性が上がる
593デフォルトの名無しさん
垢版 |
2019/12/10(火) 13:28:31.47ID:uPxE4CgL
カッコ悪い
2019/12/10(火) 13:35:45.35ID:F3h+m1zk
(E)!
2019/12/10(火) 15:08:32.10ID:FE1Fen7q
jsonファイアフォックスで見れば見やすいぞ
2019/12/10(火) 15:46:55.98ID:6QYDHDQi
よしなに整形してくれるからな
597デフォルトの名無しさん
垢版 |
2019/12/10(火) 15:57:56.29ID:48kVELqA
>>589-591
msgpack
2019/12/10(火) 16:51:25.96ID:LOypIkS3
590の”可読性”はhuman-readableの意味で使ってんだろ
2019/12/10(火) 17:23:44.99ID:eJPx3dnZ
msgpackはJSON比で大して速くも小さくもない
人間による読み書きが可能であり大抵の言語で標準で扱えるというJSONのメリットを捨てるのに見合ったリターンはない
600デフォルトの名無しさん
垢版 |
2019/12/10(火) 17:53:43.58ID:48kVELqA
充分小さいぞ
2019/12/10(火) 18:12:40.55ID:eJPx3dnZ
せいぜい50%程度を充分と思うかは貴方次第
私はそうは思いませんね
602デフォルトの名無しさん
垢版 |
2019/12/10(火) 18:15:41.31ID:48kVELqA
キーを何度も使いまわすのは無駄だと思う
2019/12/10(火) 19:20:38.59ID:eJPx3dnZ
msgpackが同じキーを何度も書いていないとでも?
2019/12/10(火) 19:51:08.94ID:1ZU0zLKJ
まあ一連のレスは無駄そうだな
2019/12/10(火) 19:59:18.07ID:ORQYQVvI
yokokara
2019/12/10(火) 20:52:52.51ID:hzlCevra
可読性といえばxmlじゃないの
いやよく知りませんけど!
2019/12/10(火) 20:56:35.79ID:6QYDHDQi
訳あってWordのdocument.xmlを読んだが非常に厳しい
608デフォルトの名無しさん
垢版 |
2019/12/11(水) 09:06:12.26ID:ZT47FwY4
>実行環境(Pythonのバージョン・OS名・IDEの種類とバージョン)をシッカリ書くこと。
Python2.7.1 Windows 2000pro 開発環境はPython付属のIDLEです

Win32のクリップボードから取得した要素を、順番に辞書に渡しているのですが
「一番目、二番目」の順で渡したものが、「二番目、一番目」とひっくり返ったり
三つ渡すと「三番目、三番目、二番目」なんて順で保管されたりして、訳がわかりません
「辞書型オブジェクトには順序がありません」という話ではなくて
keyを使って取り出してみると整合してないのです

助言を頂ければありがたいです。
609デフォルトの名無しさん
垢版 |
2019/12/11(水) 09:07:29.80ID:ZT47FwY4
>>608
(続き)
(続き)
import win32com.client
import win32clipboard

def copy(text):
  win32clipboard.OpenClipboard()
  win32clipboard.EmptyClipboard()
  win32clipboard.SetClipboardText( text, win32clipboard.CF_UNICODETEXT )
  win32clipboard.CloseClipboard()

def paste():
  win32clipboard.OpenClipboard()
  data = win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT)
  win32clipboard.CloseClipboard()
  return data

oAutoIt = win32com.client.Dispatch("AutoItX3.Control")
#Windowsアプリケーションでカーソルを操作するためのAPIです
oAutoIt.WinActivate("とある請求書ソフトウェア - [xxx-xx-x.uqm]")
#APIは、とある請求書ソフトウェアが起動して、xxx-xx-x.uqmウィンドウが開くまで待機して、その後実行します
610デフォルトの名無しさん
垢版 |
2019/12/11(水) 09:08:21.34ID:ZT47FwY4
>>609
(続き)

dic = {}

oAutoIt.MouseClick("left",91,369,3)
oAutoIt.MouseClick("left",654,65,1)
#とある請求書ソフトウェアから"AAAAA"をコピーしてきます
dic ["key"] = paste()

oAutoIt.MouseClick("left",345,367,1)
oAutoIt.MouseClick("left",649,62,1)
#とある請求書ソフトウェアから"BBBBB"をコピーしてきます
dic ["key2"] = paste()

A = (dic["key"])
print(A)
B = (dic["key2"])
print(B)


#print結果
============RESTART============
>>>
BBBBB
AAAAA
>>>
2019/12/11(水) 09:33:54.19ID:cSF0k0t2
>>610
そのAPIは知らんけど、copy関数使われてなくない?
612デフォルトの名無しさん
垢版 |
2019/12/11(水) 09:40:31.18ID:ZT47FwY4
>>610
Windowsのクリップボードを監視した感触では、
とある請求書ソフトウェアからは、正しい順番でコピーされている様子です

ペースト関数を、一回しか使わない場合は、正常動作します。
素人ながら、なんか、定義済の変数に新しい値が代入されるとき
前後でメモリの処理がまずくなっているのかなと思いました
グローバル変数とかローカル変数とか、そっちの問題なんだろうかと、それらの勉強も始めましたが
まだまださっぱりわかりません

助言だけでもいただければありがたいです
613デフォルトの名無しさん
垢版 |
2019/12/11(水) 09:43:31.13ID:ZT47FwY4
>>611
そうですね。copy関数は使われてないですね
参考元では、copyとpasteがペアで表記されていたので
もしかして改善するときに必要になるかな?と思って、念のためにあげました
失礼しました
2019/12/11(水) 09:51:14.90ID:cSF0k0t2
>>613
copy関数使わないで、コピーはどうしてるの?
マウスクリックしかされてないみたいだけど。
想像だけど、copy関数使ってコピーしてそのままreturnしたら良いんじゃ無いの?
615デフォルトの名無しさん
垢版 |
2019/12/11(水) 09:58:47.72ID:ZT47FwY4
>614
copy関数使わないで、コピーはどうしてるの?

「とある請求書ソフトウェア」は、画面上に「COPY」というボタンがありまして
それを一回クリックしてます
するとWindowsのクリップボードに、テキストが入ってきます
2019/12/11(水) 10:12:58.03ID:Z8/OjH57
sleepないときつくない?
2019/12/11(水) 10:47:34.44ID:pFOdIusR
>>608
3.6までの辞書は
「とにかく出てくる順番はテキトー 気分次第」になるぞ。
keyがうんたらなんたらとかいうレベルではなく。

いやorこまるなら3.7系にするか
標準で装備されてるcollectionsモジュールの「OrderedDict」(これは2.7系から使える)を使う
2019/12/11(水) 10:48:31.78ID:ZT47FwY4
>>616
後出しですみません

import time
time.sleep(0.3)
#0.3〜3までいくつか検討

結果
time.sleep(3)
AAAAA

近くにある命令が辞書に入ってくる
不思議な現象が起きております
環境が悪いんですかね
2019/12/11(水) 10:50:17.51ID:b0NSAXs1
>>610
A = (dic["key"])
print(A)
B = (dic["key2"])
print(B)

これを、Ruby の式展開、JavaScript のテンプレート・リテラルみたいに、もっと分かりやすく書けないか?
puts "A の値は : #{ A }"

print結果が、単にタイミングの問題で、
後にprintされたものが、先に表示されているだけかも知れない
2019/12/11(水) 10:56:31.99ID:PLslpcOL
ループが理解できない(´;ω;`)
2019/12/11(水) 10:57:06.73ID:ZT47FwY4
>>617
いやいやいや
出てくる順番は適当で良いですけど

キーと一緒に代入した(つもり)要素が、別物になってたら困りますよね

それはそれでOrderedDict 調べてみます
2019/12/11(水) 11:01:37.93ID:ZT47FwY4
>>619
>これを、Ruby の式展開、JavaScript のテンプレート・リテラルみたいに、もっと分かりやすく書けないか?

すみません。今の私の技術では限界です
ソースにふりがなのついた参考書と、赤い表紙の本を手引きにしてるレベルです

>後にprintされたものが、先に表示されているだけかも知れない

探ってみます
2019/12/11(水) 11:17:42.24ID:pFOdIusR
>>620
ループといってもいろいろあるので
https://ja.wikipedia.org/wiki/%E3%83%AB%E3%83%BC%E3%83%97_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)
↑このへんから辿って勉強しる
2019/12/11(水) 11:18:43.26ID:pFOdIusR
>>618
環境か
メモリの壊れかけを疑う件
2019/12/11(水) 12:22:25.53ID:fWs5lM4b
>>618
sleepどこに書いたの?
MouseClickした後paste呼ぶ間に入れてみれ
マウスクリックで相手のソフト側がコピーするんだったら自動化してたとしても非同期なんだよ
2019/12/11(水) 12:29:51.76ID:pFOdIusR
>>625
横レスだけど
> マウスクリックで相手のソフト側がコピーするんだったら自動化してたとしても非同期
なるほどとってもなっとくっく
627デフォルトの名無しさん
垢版 |
2019/12/11(水) 12:44:29.61ID:8OP/pbId
dataの参照を取り出してるだけで
dataの中身を取り出してないから
printするときに逆になるんじゃね
知らんけど
2019/12/11(水) 12:48:31.95ID:ZT47FwY4
>>625
>sleepどこに書いたの?
>MouseClickした後paste呼ぶ間に入れてみれ

pasteの後に入れてました
1回目と2回目のコピペの間で、休ませれば正常動作するかな?と思いまして

そして、はー。これが正解でした
sleepの位置も大事なんですね
ありがとうございました

みなさんもありがとうございました
2019/12/11(水) 12:53:40.70ID:Z8/OjH57
AutoItからの移行組だと思ったけどあれじゃAutoItの時も動かないはずだが
2019/12/11(水) 15:59:30.28ID:PLslpcOL
https://ideone.com/qx5CEY
このコードの1つ目だと、1列目の行にしかアクセスできてないです
しかし、2つ目のようにarray[x][y]とすると、2つめの行までアクセスできています
しかし、yループは1度しか回していません

xを先に書くとxがyループの取り出しに使われるのですか?
631デフォルトの名無しさん
垢版 |
2019/12/11(水) 16:03:10.35ID:8OP/pbId
何を意図してるかにもよるが
縦(行)をyと考えてるなら
array[y][x] でアクセスするべき

君がやりたければ
array[x][y] でも構わないが
y は横(列)になるってだけ
2019/12/11(水) 16:08:47.02ID:H3x5MOt+
>>610
printデバッグとデバッガのステップ実行を使うといいよ
両方組み合わせればタイミングが原因かどうかはだいだい切り分けられる

今回の例ならpaste関数のreturnの前にprint(“paste data: ”, data)を入れて
dic[“key”] = paste()の直前か直後にブレイクポイントを設定してステップ実行する
2019/12/11(水) 16:10:35.08ID:cSF0k0t2
>>630
ループ以前に配列を理解していない。
2つ目のはy値はずっと0でx値は0,1と変化している。
print(array[0][0])、print(array[1][0])と実行していることになる。
2019/12/11(水) 16:19:15.69ID:H3x5MOt+
>>630
array = [ [1,2], [3,4] ]

このarrayは1つ目の要素が[1,2]、2つ目の要素が[3,4]
だからarray[0]は[1,2]で、array[1]は[3,4]

array[0][0]は[1,2]の1つ目の要素なので1
array[0][1]は[1,2]の2つ目の要素なので2

for y in range(10):とするとyという変数に
0から9まで(10は含まない)を代入しつつループの中の処理を実行する
ループ内でyを参照したらそのループ開始時に代入された値が入ってる
xやyじゃなくfor i in range(10)と書いても同じ
xやyに特別な意味があるわけじゃない
2019/12/11(水) 16:27:38.36ID:PLslpcOL
>>631
テトリスの作成で、配列の回転をしたかったんですよ
行は[1,2]を1行目、[3,4]を2行目と考えています
2019/12/11(水) 17:01:24.49ID:wQahrCJY
>>635
拾い物
https://pastebin.com/3kAeGTNV
2019/12/11(水) 18:26:22.83ID:BSd1dztf
さすがにOSアップデートしろよwww
そんな化石使ってる時点で話にならない
2019/12/12(木) 17:12:30.59ID:f967V2wE
x = [0,0.1,0.2,0.5,1,2,3]
y = [0.5,0.5,0.4,0.4,0.5,0.4,0.5]

このリストの数値を使ってmatplotlibで折れ線グラフを書きたいのですが、xの小数の値が偏ってしまい見づらくなってしまいます。
(0 0.1 0.2 0.5 1 2 3) ←x軸の数字がこのようになってしまう。
x軸を等間隔に表示させる書き方があれば教えていただけませんでしょうか。
x,yはそれぞれx軸、y軸にあてたい数字です。
2019/12/12(木) 17:14:40.82ID:f967V2wE
>>638
(0 0.1 0.2 0.5 1 2 3) ←x軸の数字がこのようになってしまう。
この行スペースが表示できませんでしたが、メモリの0~0.5までが寄ってて、1~3までが間隔空きすぎている。等間隔ではないってことを言いたかったです。
2019/12/12(木) 17:51:08.05ID:dyy25qsp
>>638-639
fig = plt.figure()
ax = fig.add_subplot(111)
#↑ここまでは適宜自分がやってるように読み替えれ
#↓目盛りの指示を好きなように出せる呪文。y軸の設定はset_yticksだ
ax.set_xticks([0, 1, 2, 3, 4])
2019/12/12(木) 18:11:33.19ID:n05Ewb3K
plt.plot(x, y)
plt.show()
で普通に等間隔のtickで表示される

plt.plot(x, y)
plt.xticks(x)
plt.show()
とかすれば等間隔じゃないtickで表示される
2019/12/12(木) 18:21:07.32ID:f967V2wE
>>640さん、>>641さん
ありがとうございます。お二人のようにそれぞれやってみましたが等間隔で表示できません…。
少数のところが偏って表示されてしまいます。

一応コード載せます
figure = plt.figure(figsize=(10, 5))
axis = figure.add_subplot(1, 1, 1)
plt.plot(x,y)
axis.set_xticks([0,0.1,0.2,0.5,1,2,3])

plt.show()
2019/12/12(木) 18:22:15.85ID:f967V2wE
すみません…。画像の乗せ方わからなかったので試しにかいてみたやつ消すのを忘れてました…!
644デフォルトの名無しさん
垢版 |
2019/12/12(木) 18:28:45.35ID:Lo+C9eAO
ネタじゃなくてマジ池沼さん?
2019/12/12(木) 18:32:25.07ID:n05Ewb3K
>>642
>axis.set_xticks([0,0.1,0.2,0.5,1,2,3])
↑等間隔じゃないtick設定しとるやーーん
2019/12/12(木) 18:42:20.58ID:f967V2wE
>>645
はい。もともと等間隔ではないものを等間隔に表示したいという質問でした。
関数の値(例えばx = 0.1ならy = 0.4)をグラフにしたいと思っていました。
xの値は0~1までは少数もとりますが、1からは整数しかとらないためにグラフにすると偏りが出て見づらくなってしまいます。
それを等間隔に表示できれば見やすいかなと思いました。
2019/12/12(木) 20:20:59.56ID:TAtdTKRF
yokokara
2019/12/12(木) 20:54:04.13ID:n05Ewb3K
>>646
そいうことだったのか

tickを等間隔な値にして、対応するラベルを設定したい等間隔じゃない値にする
んでplotするxの値をそれに対応するよう変換する必要があるんじゃないのかな
自動でやってくれる方法があるのかは知らない

plt.plot(range(len(x)), y)
plt.xticks(range(len(x)), x)
plt.show()
2019/12/12(木) 21:57:18.88ID:dyy25qsp
>>646
無理に時空を歪めるのは見る側のことを考えてないのでヤメレ

常識的な解決策としては
・対数グラフを使う
・一部(x=0から1の区間だけ)拡大図を
  範囲内のどっか空きスペースまたは別添えでつくる
2019/12/12(木) 22:46:47.08ID:f967V2wE
>>648
すごい!これできれいにグラフが出せました。本当にありがとうございます!
書き方に工夫が必要で、そういうのをぱっと思いつけるように勉強いたします。

>>649
関数のグラフではなくてxに対応するyの値(値がxのときの結果はこの数値)はこれですよっていうだけの折れ線グラフを出したかったのです。
ですから時空は大丈夫のはず…です。
対数グラフというものを知りませんでしたので調べてみます。ありがとうございます。
2019/12/12(木) 23:26:28.33ID:XBUUy+/0
いろいろな参考書で、辞書はKeyと値のペアで出来ていると理解しましたが

keyだけがあって、値が空のを作ってしまってはいかんのでしょうか?
652デフォルトの名無しさん
垢版 |
2019/12/12(木) 23:54:29.36ID:ZS52b4mm
from selenium import webdriver
browser = webdriver.Chrome('chromedriver.exe')
browser.get('https://qiita.com/advent-calendar/2016/crawler')

calendar = browser.find_elements_by_css_selector('div.col-sm-12')

for col_sm in calendar:
col_sms = col_sm.find_elements_by_css_selector('th.adventCalendarCalendar_dayName')
print(col_sms.text)

エラーが
---> 9 print(col_sms.text)
AttributeError: 'list' object has no attribute 'text'
と表示されます。textで出力できないのはなぜなんでしょうか?
色々調べているのですが出力方法がわかりません。
初歩的なことですみませんが教えていただけないでしょうか。
2019/12/12(木) 23:58:02.89ID:n05Ewb3K
>>651
setが辞書のキーだけを集めたコレクション
2019/12/13(金) 00:15:27.02ID:+9OE4qBy
>>652
ブラウザのコンソールからJS叩くかIPythonとかでデバッグするかして
そのCSSセレクタで意図した要素が取得できてるのか確かめるといい

ビジュアルに確認できるのでブラウザのほうが最初はわかりやすいと思う
655デフォルトの名無しさん
垢版 |
2019/12/13(金) 01:37:03.59ID:cqNP6rMk
>>654
ブラウザコンソール開いてみました。ブラウザコンソールについて調べてみたのですが
よくわかりませんでした。ここに何かのコードを入力するのでしょうか。
JSとはなんでしょうか?
Jupyter Notebookを使っていまして取得したいcol_smsには
<selenium.webdriver.remote.webelement.WebElement (session="667d743c5f872d23247665eb139f3bac", element="f43fbb00-654d-472f-b0f0-1b43973384b4")>
というようなものがいくつか入っているのですが、textを使っても出力されない状況です。
質問ばかりですみません。
2019/12/13(金) 02:19:41.88ID:VJl1Rt3v
普通に長さが1の配列が戻ってきてんじゃね
イテレーター使って.text使うかcol_sms[0].textでいいんじゃね

col_sm.find_elements_by_css_selector()の戻り値ggれば解決しそうな話
俺は面倒くさいのでggりませんけども…!
2019/12/13(金) 03:41:11.64ID:+9OE4qBy
>>655
JSはJavaScript
スクレイピングするならHTML/CSSと
JavaScript/DOM APIの基礎知識は必須

browser.find_elements_by_css_selector('div.col-sm-12') はJSで
document.querySelectorAll(‘div.col-sm-12’) とするのと同じ

find_element_by_css_selectorは最初に見つかった要素を返す
find_elements_by_css_selectorは要素のリストを返す
んでリストには’text’というAttributeはありませんよってエラーが出てるよね
658デフォルトの名無しさん
垢版 |
2019/12/13(金) 06:07:45.61ID:N3jObneI
Cython について
Cython の pyx ファイルの中に、
@cython.infer_types(True) とあるんだけど、
この@は何の働きをしているの?記法なの?
詳しい人教えて
2019/12/13(金) 10:39:13.33ID:A6tZ4ufL
>>652-657
Ruby, Selenium Webdriver なら、
find_element は最初の1つだけで、find_elements はすべてを取得する(配列)

css_selector では、div.col-sm-12 などの、
Bootstrap などのCSS フレームワークなどの、デザインを指定するクラスは、あまり意味がない

#main とか、div.container.adventCalendarCalendar とか、table.table とか、
HTML の構造的に、意味があるようなセレクターを指定する。
そうすれば、スマホ・PC などのデザインによって変わらない

css_selector = "#main > div.container.adventCalendarCalendar table.table > thead th.adventCalendarCalendar_dayName"

element = driver.find_element( :css, css_selector )
elements = driver.find_elements( :css, css_selector )

puts element.text, elements[ 0 ].text, elements.length

出力
Sun
Sun
7 (配列の要素数)
660デフォルトの名無しさん
垢版 |
2019/12/13(金) 11:17:38.66ID:V90d9jYd
小学生っぽい子供が混ざってるようだが
質問するときは相手に伝わるようにちゃんと考えた方が良い
技術力よりコミュニケーション力や日本語力を気にしろ
2019/12/13(金) 11:40:28.24ID:Mexu05AP
>>653
ちょっと難しかったです。
とりあえず辞書は、キーだけで値がなくても構わないと思うことにします
2019/12/13(金) 12:14:38.95ID:A6tZ4ufL
Ruby では、ハッシュのキーに値を設定しなければ、値がnil になる。
一方、存在しないキーの値を取得すると、nil になる

これでは両者の区別がつかなくなるので、デフォルト値を設定する。
そうすると、キーに値を設定しなければ、値がデフォルト値になる

バグを避けるためには、必ずキーに値を設定するか、デフォルト値を設定しておく
663デフォルトの名無しさん
垢版 |
2019/12/13(金) 12:38:34.35ID:ZbkO1X73
>>661
set(集合)とdict(辞書)は内部的にはそこそこ近いことをやってる
ハッシュテーブルを作って、keyのハッシュからvalueを見るのがdict。key(setにkeyって概念はないけど、便宜上)のハッシュを見て、key自体が 衝突 and 同じ内容が含まれてるか を見て、key自体を要素として扱うのがset。
setは本当に数学における集合と同じような動作をする(bitwise操作などができる)って認識しとけばおっけー
664デフォルトの名無しさん
垢版 |
2019/12/13(金) 12:41:27.69ID:ZbkO1X73
Rubyの話をしてる人が居るのは本当に謎だけど、Pythonでも
dict.get(key, default)
とすればdefaultを設定した上で値を取得できる。
あるいは、collections.defaultdictを使うのもあり
2019/12/13(金) 12:46:19.59ID:Mexu05AP
>>662-663
ありがとうございます
2019/12/13(金) 12:49:22.97ID:Mexu05AP
>>664
デフォルトを設定した辞書もあるのですね
ありがとうございます
2019/12/13(金) 13:41:19.76ID:+9OE4qBy
>>661
「キーだけで値が無い辞書」をどういう風に使いたいの?
2019/12/13(金) 15:24:58.53ID:yspevzV6
>>664
スレタイにRuby禁止って付けられるくらいに、スレ違いのRubyの話をしたがる頭のおかしい構ってちゃんが一人居ついているだけだからスルーしとけばいいよ
2019/12/13(金) 15:26:20.43ID:hzMr3/rM
>>667
とある請求書作成アプリのセルからテキストをコピーして辞書に格納してから、別アプリにペーストしたいのです
ケースによって空欄のセルもあるので、そのままで良かったのだろうかと考えてました
でもNoneを入れる事にしました
2019/12/13(金) 16:20:03.71ID:+9OE4qBy
>>669
なるほど
「キーに対応する値が無い」ケースをどう表現すべきかという話だったね

文字列の空欄を示す場合は一般的には空文字を使っておいたほうが
後でテキスト処理をする時にNoneのハンドリングが必要ないし
キー自体が存在してなくてNoneになるケースとの区別が付きやすくてベターだと思う
671デフォルトの名無しさん
垢版 |
2019/12/13(金) 18:47:08.49ID:cqNP6rMk
>>656-657-659
ご回答ありがとうございます。皆さまから教えていただいたことをできる限り試してみます。
2019/12/13(金) 18:53:53.21ID:Mu2dn80c
>>652
そのページそもそもdiv.col-sm-12の子孫にth.adventCalendarCalendar_dayNameが無い件
673デフォルトの名無しさん
垢版 |
2019/12/14(土) 00:53:34.54ID:28JG+Fsi
>>672
子孫など何か関係がないといけないのですね。入力をすればなんでも取得できると思っていました。
教えていただきありがとうございます。簡単なサイトを作れるぐらいのHTMLやCSSの基本をまずは覚えた方がいいんでしょうか...
2019/12/14(土) 09:57:24.53ID:YkKG/mMh
>>670
アドバイスありがとうございます

実は辞書を作る前工程で
Win32のクリップボード経由で、文字列を取得してくるプロセスがあったのですが

そこで自分が書いた関数だと、Winアプリが文字列が空だと、エラーになることに気がつきました

悩ましかったのですが、エラーになったらtry 〜exceptで
変数にNoneを入れることでしのぎました

text = “” だとデバッグで読むときよく分からなかったですし

ここは、何がベターなのかもう少し考えてみます
このスレのコメントは大変ためになります
2019/12/14(土) 10:57:58.37ID:oHNLq8G6
馬鹿には無理
676659
垢版 |
2019/12/14(土) 10:59:10.77ID:8NRAnTxB
>>673
web アプリの初心者は基本、サーバー側はRuby で、
クライアント側は、HTML, CSS/SASS, Bootstrap, JavaScript, jQuery などを使う

jQuery のCSS Selector のルールを学べばよい。
emmet も、似たようなもの

# はid で、. はクラスとか、
x > y なら子要素(子孫を含まない)で、x y なら子孫要素とか

それと、他人のHTML の解析は、基本無理。
クラスをどういう意味で使っているのか、分からないから

構造的な意味で使っているのか、単なるデザイン上のものなのか、
または、Bootstrap などのCSS フレームワークのルールなのかも知れないし、
他人の考えなど、分からない

col-sm-12 みたいに、small なら、12列分の幅を使うとか、
こういうデザイン上のものを、CSS Selectorに入れると、
ページのデザインが変わると、セレクトされなくなったりしてしまう

一方、構造的な意味は、変わりにくい
2019/12/14(土) 11:23:55.42ID:dDx9/YlQ
yokokara
678デフォルトの名無しさん
垢版 |
2019/12/14(土) 11:34:02.24ID:TlZt0bii
後ろから前から
679デフォルトの名無しさん
垢版 |
2019/12/14(土) 11:52:10.65ID:e26gFA86
アホな質問で申し訳ないが
class の、書き方について質問あります

Python がはじめてのプログラミング言語で
やっと手続き的な記述ではやりたいことが
できるようになってきた

オブジェクト指向理解してないのもあるかもだけど
ライブラリとか、フレームワークのclass をオーバーライドしてかく時に

self が乱立しまくってて、
効率わるいようなきがするのだけども
書き方があってるのか知りたい

現場エラー吐いてないから、いいかもしれないけど
マナーというか、お作法としてどうなんやろ?と

別途class つくったり関数作ったりするの?
2019/12/14(土) 14:32:25.78ID:tCtWHq2v
>>679
それは誰もが感じる疑問

Pythonではインスタンスメソッドとして扱いたいメソッドの第一引数にselfを渡して
明示的にselfを指定する以外にインスタンスメンバーを参照する方法はないので
オブジェクト指向的に書く場合はselfが乱立しまくるのが通常

”Explicit is better than implicit.”という苦しい言い訳をする人も多いけど
そんな高尚なものじゃなく単に言語の制約なのでPython使う限りは諦めて受け入れるしかない
2019/12/14(土) 16:23:05.11ID:8NRAnTxB
Ruby のクラスでは、引数にself を持ちまわらなくても、selfが使えるだろ。
それは、実装が大変

ユーザーの利便性を上げるために、実装で頑張った
682デフォルトの名無しさん
垢版 |
2019/12/14(土) 16:52:04.55ID:TlZt0bii
selfが嫌なら第一引数を@にすれば良いんだよ
@.hoge でアクセス出来るし便利だぞ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況