Чтобы достичь ожидаемого результата, задайте правильное расстояние между col для всех элементов div внутри каждой строки.
Проблема: перекрытие элементов div, вызывающее проблему выбора математики из выпадающего списка
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<meta name="google" content="notranslate">
<title>Title</title>
<!-- Bootstrap Core CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<!-- Custom CSS -->
</head>
<body>
<div class="container-fluid">
<div class="row">
<div class="col-12">
</div>
</div>
<div class="row">
<div class="col-12"><br></div>
</div>
<div class="row">
<div class="col-12">
<div class="d-flex align-items-center">
<div class="container">
<br/><br/><br/>
<div class="container">
<div class="row align-items-center">
</div>
<div class="row">
<div class="col-2"></div>
<div class="col-6">
<div class="row">
<div class="col-1">Math</div>
<div class="col-2"></div>
<div class="col-1">Science</div>
</div>
</div>
</div>
<div class="row ">
<div class="col-2">
Student1
</div>
<div class="col-3">
<div class="row">
<div class="col-6">
<div>
<select name="name_student1_math" id="id_student1_math">
<option value="na">N/A</option>
<option value="1" >1</option>
<option value="2" selected >2</option>
<option value="3" >3</option>
<option value="4" >4</option>
</select>
</div>
</div>
<div class="col-1"></div>
<div class="col-3">
<div>
<select name="name_student1_science" id="id_student1_science">
<option value="na">N/A</option>
<option value="1" >1</option>
<option value="2" >2</option>
<option value="3" >3</option>
<option value="4" selected >4</option>
<option value="5" >5</option>
<option value="6" >6</option>
<option value="7" >7</option>
<option value="8" >8</option>
<option value="9" >9</option>
</select>
</div>
</div>
</div>
</div>
</div>
<div class="row ">
<div class="col-2">
Student2
</div>
<div class="col-3">
<div class="row">
<div class="col-6">
<div>
<select name="name_student2_math" id="id_student2_math">
<option value="na">N/A</option>
<option value="1" >1</option>
<option value="2" selected >2</option>
<option value="3" >3</option>
<option value="4" >4</option>
</select>
</div>
</div>
<div class="col-1"></div>
<div class="col-3">
<div>
<select name="name_student2_science" id="id_student2_science">
<option value="na">N/A</option>
<option value="1" >1</option>
<option value="2" >2</option>
<option value="3" >3</option>
<option value="4" selected >4</option>
<option value="5" >5</option>
<option value="6" >6</option>
<option value="7" >7</option>
<option value="8" >8</option>
<option value="9" >9</option>
</select>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
Проблема - это с return self.display
Вы возвращаете ссылку на этот список (не копия). Таким образом, то, с чем Вы заканчиваете, является списком, где каждый элемент является ссылкой на self.display. Для иллюстрирования посмотрите на следующее:
>>> a = [1,2]
>>> b = [a,a]
>>> b
[[1, 2], [1, 2]]
>>> a.append(3)
>>> b
[[1, 2, 3], [1, 2, 3]]
Вы, вероятно, хотите использовать что-то как return self.display[:]
.
Следите, если я осуществляю рефакторинг это немного?
def digit(n):
for i in itertools.count():
yield (i%n+1, not i%n)
Но на самом деле Вам не нужен тот при реализации всего этого как простого итератора:
def counter(digits, base):
counter = [0] * digits
def iterator():
for total in itertools.count(1):
for i in range(len(counter)):
counter[i] = (counter[i] + 1) % base
if counter[i]:
break
print total, list(reversed(counter))
yield list(reversed(counter))
return iterator()
c = counter(2, 4)
print list(itertools.islice(c, 10))
Если Вы хотите избавиться от печати (отладка, не так ли?), пойдите с циклом с условием продолжения.
Это incindentally также решает Вашу начальную проблему, потому что reversed
возвращает копию списка.
О, и это основано на нуле теперь ;)