回答編集履歴
8
一部手直し
test
CHANGED
@@ -17,24 +17,25 @@
|
|
17
17
|
|
18
18
|
**追記**
|
19
19
|
|
20
|
-
`eval()` を使う
|
20
|
+
`eval()` を使う場合は以下の様な感じに。
|
21
21
|
```python
|
22
22
|
def yes_or_no(prompt):
|
23
23
|
ans = input(f'{prompt} [yes/no]').strip().lower()
|
24
24
|
return 'yes' if ans in ('yes', 'y') else 'no'
|
25
25
|
|
26
26
|
def eval_qa(reply, yn):
|
27
|
-
ans = eval(reply, yn)
|
27
|
+
ans = eval(yes_or_no(reply), yn)
|
28
28
|
return ans() if callable(ans) else ans
|
29
29
|
|
30
|
+
if __name__ == '__main__':
|
31
|
+
test = lambda: eval_qa('実際の年齢よりも、年上にみられることが多い',
|
32
|
+
{'yes': loud, 'no': dext})
|
33
|
+
loud = lambda: eval_qa('声がでかい',
|
34
|
+
{'yes': '人前で注目を浴びるのが好き', 'no': dext})
|
30
|
-
dext = lambda: eval_qa(
|
35
|
+
dext = lambda: eval_qa('手先が器用で、結構まめだ。簡単な料理は作れる。',
|
31
|
-
{'yes': '好きなことには、ご飯を忘れても熱中する方',
|
36
|
+
{'yes': '好きなことには、ご飯を忘れても熱中する方',
|
32
|
-
'no': '君はクラス一のひょうきん君'})
|
37
|
+
'no': '君はクラス一のひょうきん君'})
|
33
|
-
loud = lambda: eval_qa(yes_or_no('声がでかい'),
|
34
|
-
{'yes': '人前で注目を浴びるのが好き', 'no': dext})
|
35
|
-
test = lambda: eval_qa(yes_or_no(f'実際の年齢よりも、年上にみられることが多い'),
|
36
|
-
{'yes': loud, 'no': dext})
|
37
38
|
|
38
|
-
print(test())
|
39
|
+
print(test())
|
39
40
|
```
|
40
41
|
|
7
eval を利用する例を書き直し
test
CHANGED
@@ -23,13 +23,18 @@
|
|
23
23
|
ans = input(f'{prompt} [yes/no]').strip().lower()
|
24
24
|
return 'yes' if ans in ('yes', 'y') else 'no'
|
25
25
|
|
26
|
+
def eval_qa(reply, yn):
|
26
|
-
|
27
|
+
ans = eval(reply, yn)
|
27
|
-
{'yes': '"人前で注目を浴びるのが好き"', 'no': 'dext()'}))
|
28
|
-
dext = lambda: eval(yes_or_no('手先が器用で、結構まめだ。簡単な料理は作れる。'),
|
29
|
-
{'yes': '好きなことには、ご飯を忘れても熱中する方',
|
30
|
-
|
28
|
+
return ans() if callable(ans) else ans
|
31
29
|
|
30
|
+
dext = lambda: eval_qa(yes_or_no('手先が器用で、結構まめだ。簡単な料理は作れる。'),
|
31
|
+
{'yes': '好きなことには、ご飯を忘れても熱中する方',
|
32
|
+
'no': '君はクラス一のひょうきん君'})
|
33
|
+
loud = lambda: eval_qa(yes_or_no('声がでかい'),
|
34
|
+
{'yes': '人前で注目を浴びるのが好き', 'no': dext})
|
32
|
-
|
35
|
+
test = lambda: eval_qa(yes_or_no(f'実際の年齢よりも、年上にみられることが多い'),
|
33
|
-
{'yes':
|
36
|
+
{'yes': loud, 'no': dext})
|
37
|
+
|
38
|
+
print(test())
|
34
39
|
```
|
35
40
|
|
6
一部整形
test
CHANGED
@@ -2,18 +2,17 @@
|
|
2
2
|
|
3
3
|
`eval()` や `exec()` は使っていないので、ご要望を満たすものではありませんが、分岐(branch)構造を nested tuple で表現して利用する方法を参考までに回答します。
|
4
4
|
```python
|
5
|
-
dext
|
5
|
+
dext = ('手先が器用で、結構まめだ。簡単な料理は作れる。',
|
6
|
-
|
6
|
+
('好きなことには、ご飯を忘れても熱中する方', '君はクラス一のひょうきん君'))
|
7
|
+
loud = ('声がでかい', ('人前で注目を浴びるのが好き', dext))
|
7
|
-
test = ('実際の年齢よりも、年上にみられることが多い',
|
8
|
+
test = ('実際の年齢よりも、年上にみられることが多い', (loud, dext))
|
8
|
-
(('声がでかい',
|
9
|
-
('人前で注目を浴びるのが好き', dexterous)),
|
10
|
-
dexterous))
|
11
9
|
|
12
10
|
if __name__ == '__main__':
|
11
|
+
p = test # shallow copy
|
13
|
-
while isinstance(
|
12
|
+
while isinstance(p, tuple):
|
14
|
-
ans = input(f'{
|
13
|
+
ans = input(f'{p[0]} [yes/no]')
|
15
|
-
|
14
|
+
p = p[1][ans != 'yes']
|
16
|
-
print(
|
15
|
+
print(p)
|
17
16
|
```
|
18
17
|
|
19
18
|
**追記**
|
5
test
CHANGED
@@ -20,12 +20,17 @@
|
|
20
20
|
|
21
21
|
`eval()` を使うのであれば、以下の様な感じに。(かなり無理がありますが)
|
22
22
|
```python
|
23
|
+
def yes_or_no(prompt):
|
23
|
-
|
24
|
+
ans = input(f'{prompt} [yes/no]').strip().lower()
|
24
|
-
|
25
|
+
return 'yes' if ans in ('yes', 'y') else 'no'
|
26
|
+
|
25
|
-
loud = lambda: eval(eval(
|
27
|
+
loud = lambda: eval(eval(yes_or_no('声がでかい'),
|
26
28
|
{'yes': '"人前で注目を浴びるのが好き"', 'no': 'dext()'}))
|
29
|
+
dext = lambda: eval(yes_or_no('手先が器用で、結構まめだ。簡単な料理は作れる。'),
|
30
|
+
{'yes': '好きなことには、ご飯を忘れても熱中する方',
|
31
|
+
'no': '君はクラス一のひょうきん君'})
|
27
32
|
|
28
|
-
print(eval(eval(
|
33
|
+
print(eval(eval(yes_or_no(f'実際の年齢よりも、年上にみられることが多い'),
|
29
34
|
{'yes': 'loud()', 'no': 'dext()'})))
|
30
35
|
```
|
31
36
|
|
4
test
CHANGED
@@ -18,12 +18,14 @@
|
|
18
18
|
|
19
19
|
**追記**
|
20
20
|
|
21
|
-
`eval()` を使う
|
21
|
+
`eval()` を使うのであれば、以下の様な感じに。(かなり無理がありますが)
|
22
|
+
```python
|
23
|
+
dext = lambda: eval(input(f'手先が器用で、結構まめだ。簡単な料理は作れる。 [yes/no]'),
|
24
|
+
{'yes': '好きなことには、ご飯を忘れても熱中する方', 'no': '君はクラス一のひょうきん君'})
|
25
|
+
loud = lambda: eval(eval(input(f'声がでかい [yes/no]'),
|
26
|
+
{'yes': '"人前で注目を浴びるのが好き"', 'no': 'dext()'}))
|
22
27
|
|
23
|
-
```python
|
24
|
-
if __name__ == '__main__':
|
25
|
-
yes, no = 0, 1
|
26
|
-
while isinstance(test, tuple):
|
27
|
-
|
28
|
+
print(eval(eval(input(f'実際の年齢よりも、年上にみられることが多い [yes/no]'),
|
28
|
-
|
29
|
+
{'yes': 'loud()', 'no': 'dext()'})))
|
29
30
|
```
|
31
|
+
|
3
test
CHANGED
@@ -15,3 +15,15 @@
|
|
15
15
|
test = test[1][ans != 'yes']
|
16
16
|
print(test)
|
17
17
|
```
|
18
|
+
|
19
|
+
**追記**
|
20
|
+
|
21
|
+
`eval()` を使うとすれば、以下の様にするとよいかもしれません。(無理やりですが)
|
22
|
+
|
23
|
+
```python
|
24
|
+
if __name__ == '__main__':
|
25
|
+
yes, no = 0, 1
|
26
|
+
while isinstance(test, tuple):
|
27
|
+
test = test[1][eval(input(f'{test[0]} [yes/no]'))]
|
28
|
+
print(test)
|
29
|
+
```
|
2
test
CHANGED
@@ -6,8 +6,8 @@
|
|
6
6
|
('好きなことには、ご飯を忘れても熱中する方', '君はクラス一のひょうきん君'))
|
7
7
|
test = ('実際の年齢よりも、年上にみられることが多い',
|
8
8
|
(('声がでかい',
|
9
|
-
('人前で注目を浴びるのが好き', dexterous)),
|
9
|
+
('人前で注目を浴びるのが好き', dexterous)),
|
10
|
-
|
10
|
+
dexterous))
|
11
11
|
|
12
12
|
if __name__ == '__main__':
|
13
13
|
while isinstance(test, tuple):
|
1
test
CHANGED
@@ -12,6 +12,6 @@
|
|
12
12
|
if __name__ == '__main__':
|
13
13
|
while isinstance(test, tuple):
|
14
14
|
ans = input(f'{test[0]} [yes/no]')
|
15
|
-
test = test[1][
|
15
|
+
test = test[1][ans != 'yes']
|
16
16
|
print(test)
|
17
17
|
```
|