teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記 2019/03/16 を追加しました。

2019/03/16 03:25

投稿

gh640
gh640

スコア1407

answer CHANGED
@@ -38,4 +38,59 @@
38
38
 
39
39
  このようなパターン想定してコードを書く必要があるのではないでしょうか。
40
40
 
41
- 質問者さんがどのぐらいの背景知識をお持ちなのかわからないので、「このぐらいかな」という仮定を措いて回答してみました。いかがでしょうか。
41
+ 質問者さんがどのぐらいの背景知識をお持ちなのかわからないので、「このぐらいかな」という仮定を措いて回答してみました。いかがでしょうか。
42
+
43
+ ### 追記 2019/03/16
44
+
45
+ コメントお戻しいただきありがとうございます。そうですか。
46
+
47
+ > 質問文に追記した入力をした際にこちらのエラーが返ってくるということは、変数numの中に値が格納されていないということなのでしょうか。
48
+
49
+ そうですね、 `num` に空文字列( `''` )が格納されている、というではないかと思います。
50
+
51
+ 質問文に追記いただいた入力値でもエラーが出てしまうということでしたら、 `data` のループの `cardList` が想定外の形になっているのかもしれませんね。行単位での切り出しを期待されているかと思うのですが、 1 文字ずつの切り出しになっているののかもしれません。
52
+
53
+ 例えば、次のような感じで、各ループの先頭で `cardList` の中身を出力して確認されてみてはいかがでしょう。
54
+
55
+ ```patch
56
+ for cardList in data:
57
+ + print('cardList: {!r}'.format(cardList))
58
+ num,*card=cardList.split(" ",1)#カードの枚数とカードの名前を分ける
59
+ ```
60
+
61
+ かんたんな検証のために、私の環境で次のスクリプトを書いて実行してみました。望ましい結果が出力されるようです。
62
+
63
+ スクリプト:
64
+
65
+ ```python
66
+ data = """3 Dive Down (XLN) 53
67
+ 1 Essence Capture (RNA) 37
68
+ """
69
+
70
+ loop = 1
71
+ deck = []
72
+ for cardList in data.splitlines():
73
+ num, *card = cardList.split(" ", 1)
74
+ stripNum = int(num.rstrip())
75
+ while loop <= stripNum:
76
+ deck.extend([*card]) # デッキリストのカードを先頭から一行ずつ読み込む
77
+ loop += 1
78
+ loop = 1
79
+
80
+ print(deck)
81
+ ```
82
+
83
+ 出力結果:
84
+
85
+ ```text
86
+ ['Dive Down (XLN) 53', 'Dive Down (XLN) 53', 'Dive Down (XLN) 53', 'Essence Capture (RNA) 37']
87
+ ```
88
+
89
+ これを、次のような形で、ループの `data.splitlines()` のところを単に `data` としてしまうと、ダメなようです。
90
+
91
+ ```python
92
+ for cardList in data:
93
+ num, *card = cardList.split(" ", 1)
94
+ ```
95
+
96
+ `print()` を入れて `splitlines()` のあるパターンと無いパターンでお試しになってみてください :D