回答編集履歴

3

今更だけど、無駄な処理をしてたので修正。

2018/06/20 17:42

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -22,9 +22,9 @@
22
22
 
23
23
  def my_shuffle(src):
24
24
 
25
+ dst = src[:]
26
+
25
27
  while True:
26
-
27
- dst = src[:]
28
28
 
29
29
  random.shuffle(dst)
30
30
 
@@ -64,9 +64,21 @@
64
64
 
65
65
 
66
66
 
67
- **実行結果** [Wandbox](https://wandbox.org/permlink/ZqJTMqamvafVMi3Q)
67
+ **実行結果** [Wandbox](https://wandbox.org/permlink/EKjPqj85WXTMt1wh)
68
68
 
69
69
  ```
70
+
71
+ [2, 1, 3]
72
+
73
+ [3, 1, 2]
74
+
75
+ [1, 3, 2]
76
+
77
+ [3, 2, 1]
78
+
79
+ [1, 3, 2]
80
+
81
+ [2, 3, 1]
70
82
 
71
83
  [3, 2, 1]
72
84
 
@@ -74,39 +86,27 @@
74
86
 
75
87
  [1, 3, 2]
76
88
 
77
- [2, 3, 1]
78
-
79
- [1, 2, 3]
80
-
81
89
  [2, 1, 3]
82
90
 
83
91
  [3, 2, 1]
84
92
 
85
93
  [2, 1, 3]
86
94
 
87
- [1, 2, 3]
95
+ [3, 1, 2]
88
96
 
89
- [3, 1, 2]
97
+ [1, 3, 2]
98
+
99
+ [3, 2, 1]
90
100
 
91
101
  [2, 1, 3]
92
102
 
93
103
  [1, 3, 2]
94
104
 
95
- [3, 2, 1]
105
+ [3, 1, 2]
96
106
 
97
107
  [2, 3, 1]
98
108
 
99
109
  [3, 1, 2]
100
-
101
- [2, 1, 3]
102
-
103
- [3, 1, 2]
104
-
105
- [2, 3, 1]
106
-
107
- [3, 2, 1]
108
-
109
- [1, 2, 3]
110
110
 
111
111
  ```
112
112
 
@@ -132,9 +132,9 @@
132
132
 
133
133
  def my_shuffle(src):
134
134
 
135
+ dst = src[:]
136
+
135
137
  while True:
136
-
137
- dst = src[:]
138
138
 
139
139
  random.shuffle(dst)
140
140
 

2

追記

2018/06/20 17:42

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- 一度`list(d.keys())`を取得したら、それを使うようにしてください。
7
+ 一度`list(辞書.keys())`を取得したら、それを使うようにしてください。
8
8
 
9
9
 
10
10
 
@@ -113,3 +113,65 @@
113
113
 
114
114
 
115
115
  上記コードの`my_shuffle`では第一要素が変わるまで何回もシャッフルし続けています。
116
+
117
+
118
+
119
+ 書いてみた
120
+
121
+ ---
122
+
123
+ 上記の点を踏まえると次のように書くことが出来ます。
124
+
125
+ ```Python
126
+
127
+ import random
128
+
129
+
130
+
131
+
132
+
133
+ def my_shuffle(src):
134
+
135
+ while True:
136
+
137
+ dst = src[:]
138
+
139
+ random.shuffle(dst)
140
+
141
+
142
+
143
+ if src[0] != dst[0]:
144
+
145
+ break
146
+
147
+
148
+
149
+ return dst
150
+
151
+
152
+
153
+
154
+
155
+ my_dict = {
156
+
157
+ 'a': 16, 'b': 29, 'c': 35, 'd': 55, 'e': 57, 'n': 70, 'o': 72, 'p': 101, 'q': 103
158
+
159
+ }
160
+
161
+ keys = list(my_dict.keys())
162
+
163
+
164
+
165
+ n = int(input())
166
+
167
+ for _ in range(n):
168
+
169
+ keys = my_shuffle(keys)
170
+
171
+ print(keys[:2])
172
+
173
+ ```
174
+
175
+
176
+
177
+ 関数の使い方にかなり無駄があるので、そのような基礎的な部分も改めて復習してください。

1

コードの変更

2018/06/18 08:19

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -20,29 +20,21 @@
20
20
 
21
21
 
22
22
 
23
- def shuffled(src):
24
-
25
- """引数自体を変更せずに、シャッフルしたリストを返す。"""
26
-
27
- dst = src[:]
28
-
29
- random.shuffle(dst)
30
-
31
- return dst
32
-
33
-
34
-
35
-
36
-
37
23
  def my_shuffle(src):
38
24
 
39
- dst = src
25
+ while True:
40
26
 
41
- while src[0] == dst[0]:
27
+ dst = src[:]
42
28
 
43
- dst = shuffled(src)
29
+ random.shuffle(dst)
44
30
 
31
+
45
32
 
33
+ if src[0] != dst[0]:
34
+
35
+ break
36
+
37
+
46
38
 
47
39
  return dst
48
40
 
@@ -56,9 +48,9 @@
56
48
 
57
49
  for _ in range(20):
58
50
 
51
+ my_list = my_shuffle(my_list)
52
+
59
53
  print(my_list)
60
-
61
- my_list = my_shuffle(my_list)
62
54
 
63
55
 
64
56
 
@@ -72,15 +64,37 @@
72
64
 
73
65
 
74
66
 
75
- **実行結果** [Wandbox](https://wandbox.org/permlink/4QOvld8TcOZGv2Ba)
67
+ **実行結果** [Wandbox](https://wandbox.org/permlink/ZqJTMqamvafVMi3Q)
76
68
 
77
69
  ```
78
70
 
71
+ [3, 2, 1]
72
+
73
+ [2, 1, 3]
74
+
75
+ [1, 3, 2]
76
+
77
+ [2, 3, 1]
78
+
79
79
  [1, 2, 3]
80
+
81
+ [2, 1, 3]
80
82
 
81
83
  [3, 2, 1]
82
84
 
85
+ [2, 1, 3]
86
+
87
+ [1, 2, 3]
88
+
89
+ [3, 1, 2]
90
+
91
+ [2, 1, 3]
92
+
83
93
  [1, 3, 2]
94
+
95
+ [3, 2, 1]
96
+
97
+ [2, 3, 1]
84
98
 
85
99
  [3, 1, 2]
86
100
 
@@ -90,31 +104,9 @@
90
104
 
91
105
  [2, 3, 1]
92
106
 
93
- [1, 2, 3]
94
-
95
- [3, 2, 1]
96
-
97
- [2, 3, 1]
98
-
99
- [1, 3, 2]
100
-
101
- [2, 1, 3]
102
-
103
- [3, 2, 1]
104
-
105
- [2, 3, 1]
106
-
107
- [1, 2, 3]
108
-
109
107
  [3, 2, 1]
110
108
 
111
109
  [1, 2, 3]
112
-
113
- [2, 1, 3]
114
-
115
- [3, 1, 2]
116
-
117
- [1, 3, 2]
118
110
 
119
111
  ```
120
112