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

回答編集履歴

5

修正

2020/12/27 10:16

投稿

退会済みユーザー
answer CHANGED
@@ -30,7 +30,7 @@
30
30
  元のmethod_dict.get('win')()より100倍直観的だと思ったんですが、わかりにくいという指摘があったのであえて根本的な問題提起を追記します。
31
31
 
32
32
  そもそもこの質問は質問として実用的な問題ではないと思います。
33
- 「勝ち・負け・引き分け」という結果データに対して、「勝ちです・負けです・引き分けです」という、結果に対応するメッセージを、勝ち・負け・引き分けという名前の付いた各関数で返す、という操作をif文を使わずに書け、という問題です。
33
+ 「勝ち・負け・引き分け」を表す**文字列**~~結果データ~~応じて、「勝ちです・負けです・引き分けです」という、結果に対応するメッセージを、勝ち・負け・引き分けという名前の付いた各関数で返す、という操作をif文を使わずに書け、という問題です。
34
34
 
35
35
  上記のシンプルな問題をそのままで解決するなら結果に対するメッセージを辞書で対応させればいいだけの話と思います。
36
36
  ```
@@ -50,27 +50,8 @@
50
50
  print(mes)
51
51
  ```
52
52
 
53
- python3.6以降なら
54
- ```
55
- from enum import IntEnum, auto
56
- class Result(IntEnum):
57
- WIN = auto()
58
- LOSE = auto()
59
- DRAW = auto()
60
53
 
61
- result_messages = {
62
- Result.WIN:'you win !',
63
- Result.LOSE: 'you lose...',
64
- Result.DRAW: 'draw game'
65
- }
66
54
 
67
- result = Result.WIN
68
-
69
- mes = result_messages.get(result)
70
- assert mes is not None
71
- print(mes)
72
- ```
73
-
74
55
  私個人は超能力者ではないので、質問に書いてあるシンプルな問題を敷衍して、一般的実用的な問題に拡張し、質問者様がご満足されるような一般的な答えを出すことはできません。
75
56
 
76
57
  複雑度が大きすぎてLintに怒られるから、というのも状況も理解に苦しむのですが、本質的に解決したいならば、その「困っている」現状のソースをそのまま掲載した方が早いのではないでしょうか。

4

追加

2020/12/27 10:16

投稿

退会済みユーザー
answer CHANGED
@@ -49,6 +49,28 @@
49
49
  # 勝負結果のメッセージを表示します。
50
50
  print(mes)
51
51
  ```
52
+
53
+ python3.6以降なら
54
+ ```
55
+ from enum import IntEnum, auto
56
+ class Result(IntEnum):
57
+ WIN = auto()
58
+ LOSE = auto()
59
+ DRAW = auto()
60
+
61
+ result_messages = {
62
+ Result.WIN:'you win !',
63
+ Result.LOSE: 'you lose...',
64
+ Result.DRAW: 'draw game'
65
+ }
66
+
67
+ result = Result.WIN
68
+
69
+ mes = result_messages.get(result)
70
+ assert mes is not None
71
+ print(mes)
72
+ ```
73
+
52
74
  私個人は超能力者ではないので、質問に書いてあるシンプルな問題を敷衍して、一般的実用的な問題に拡張し、質問者様がご満足されるような一般的な答えを出すことはできません。
53
75
 
54
76
  複雑度が大きすぎてLintに怒られるから、というのも状況も理解に苦しむのですが、本質的に解決したいならば、その「困っている」現状のソースをそのまま掲載した方が早いのではないでしょうか。

3

修正

2020/12/27 10:03

投稿

退会済みユーザー
answer CHANGED
@@ -43,7 +43,7 @@
43
43
  # なんやかんや計算して結果は勝ちと出たようです。
44
44
  result = 'win'
45
45
 
46
- mes = result_mesages.get(result)
46
+ mes = result_messages.get(result)
47
47
  assert mes is not None
48
48
 
49
49
  # 勝負結果のメッセージを表示します。

2

追加

2020/12/27 09:54

投稿

退会済みユーザー
answer CHANGED
@@ -24,4 +24,31 @@
24
24
  result = 'win'
25
25
 
26
26
  print(do(result))
27
- ```
27
+ ```
28
+
29
+ # 追記
30
+ 元のmethod_dict.get('win')()より100倍直観的だと思ったんですが、わかりにくいという指摘があったのであえて根本的な問題提起を追記します。
31
+
32
+ そもそもこの質問は質問として実用的な問題ではないと思います。
33
+ 「勝ち・負け・引き分け」という結果データに対して、「勝ちです・負けです・引き分けです」という、結果に対応するメッセージを、勝ち・負け・引き分けという名前の付いた各関数で返す、という操作をif文を使わずに書け、という問題です。
34
+
35
+ 上記のシンプルな問題をそのままで解決するなら結果に対するメッセージを辞書で対応させればいいだけの話と思います。
36
+ ```
37
+ result_messages = {
38
+ 'win':'you win !',
39
+ 'lose': 'you lose...',
40
+ 'draw': 'draw game'
41
+ }
42
+
43
+ # なんやかんや計算して結果は勝ちと出たようです。
44
+ result = 'win'
45
+
46
+ mes = result_mesages.get(result)
47
+ assert mes is not None
48
+
49
+ # 勝負結果のメッセージを表示します。
50
+ print(mes)
51
+ ```
52
+ 私個人は超能力者ではないので、質問に書いてあるシンプルな問題を敷衍して、一般的実用的な問題に拡張し、質問者様がご満足されるような一般的な答えを出すことはできません。
53
+
54
+ 複雑度が大きすぎてLintに怒られるから、というのも状況も理解に苦しむのですが、本質的に解決したいならば、その「困っている」現状のソースをそのまま掲載した方が早いのではないでしょうか。

1

修正

2020/12/27 09:54

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,5 @@
1
1
  ```
2
+ import sys
2
3
  def do(command):
3
4
  try:
4
5
  method = getattr(sys.modules[__name__], command)