質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

1489閲覧

予想通りの結果が得られません(原因を教えて下さい)

YuheiFujioka

総合スコア17

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2016/07/02 11:48

下のクラス(下記ソースコード)を実行後に、以下を実行するとb.cal(deck)が20と出力され、困っています。
deckの要素の和を計算しているつもりなので、15になると考えていたのですが…
原因がわからず困っています。よろしくお願いします。

deck = [8,7]
b = Point(deck)
b.cal(deck)

クラスソースコード

class Point(object):##手持ちカードの合計を返す def __init__(self,deck): self.deck =deck def cal(self,deck): s = 0 sorted((self.deck), reverse = True) for i in range(len(self.deck)): if self.deck == 11 or 12 or 13: s += 10 elif self.deck == 1: s += 11 if sum >= 21: s -=10 else: s += self.deck return s

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ループの中で self.deck と書いてあるものを self.deck[i] に変えてみたらどうですか?

投稿2016/07/02 11:52

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HogeAnimalLover

2016/07/02 12:01

別の回答をしましたが、これも怪しいですね。自分も回答してから気付いて追記しました。
YuheiFujioka

2016/07/02 12:10

ご指摘ありがとうございます。 解決しました。 Zuishinさんにご指摘頂いた内容を訂正し、加えてHogeAnimalLoverさんにご助言頂いた通りにor部分の記載を訂正すると、うまくいきました。
guest

0

ベストアンサー

pythonには詳しくないけど間違いがあるとするならば

if self.deck == 11 or 12 or 13:
→if self.deck == 11 or self.deck == 12 or self.deck == 13:

と読み替えたうえで
self.deck→self.deck[i]
とする必要があります。(これは各要素に対するアクセスなので定義にもよるとおもいますが)

少なくともC言語ではこんな感じの記述が必要です。

投稿2016/07/02 11:51

編集2016/07/02 11:56
HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YuheiFujioka

2016/07/02 12:12

ご助言ありがとうございます。 ご指摘頂いたように、or部分の修正とリストインデックスの追記を行った結果、 解決しました。
guest

0

ブラックジャックの手の得点計算として、すこしでも単純になるように書きなおしてみました。
(得点計算ルールの勘違いがあるかもしれませんが)
deck.py

python

1VALUES = { 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9, 10:10, 11:10, 12:10, 13:10 } 2 3class Point(object): 4 def cal2(self, deck): # 手持ちカードの合計を返す 5 sum = 0 6 for card in deck: 7 sum += VALUES.get(card) 8 if card == 1 and sum + 10 <= 21: 9 sum += 10 10 return sum 11 12b = Point() 13print(b.cal2([8, 7])) 14print(b.cal2([10, 1])) 15print(b.cal2([9, 1])) 16print(b.cal2([9, 1, 1])) 17print(b.cal2([9, 1, 2])) 18print(b.cal2([1, 1])) 19print(b.cal2([1, 1, 8, 1]))

実行結果例

$ python3 deck.py 15 21 20 21 22 12 21

投稿2016/07/02 23:10

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問