import
random
import
copy
questions
=
[
{
"question"
:
"酒后驾驶机动车的,一次记多少分?"
,
"options"
: [
"A. 6分"
,
"B. 12分"
,
"C. 3分"
,
"D. 9分"
],
"answer"
:
"B"
},
{
"question"
:
"在高速公路上倒车,一次记多少分?"
,
"options"
: [
"A. 1分"
,
"B. 6分"
,
"C. 12分"
,
"D. 9分"
],
"answer"
:
"C"
},
{
"question"
:
"驾驶机动车违反道路交通信号灯通行时,一次记多少分?"
,
"options"
: [
"A. 2分"
,
"B. 6分"
,
"C. 3分"
,
"D. 12分"
],
"answer"
:
"B"
},
{
"question"
:
"驾驶机动车未按规定使用灯光的,一次记多少分?"
,
"options"
: [
"A. 1分"
,
"B. 2分"
,
"C. 3分"
,
"D. 不记分"
],
"answer"
:
"A"
},
{
"question"
:
"驾驶伪造号牌的机动车上路行驶,一次记多少分?"
,
"options"
: [
"A. 3分"
,
"B. 6分"
,
"C. 9分"
,
"D. 12分"
],
"answer"
:
"D"
},
{
"question"
:
"造成交通事故后逃逸致人轻伤,尚不构成犯罪的,一次记多少分?"
,
"options"
: [
"A. 6分"
,
"B. 9分"
,
"C. 12分"
,
"D. 不记分"
],
"answer"
:
"C"
},
{
"question"
:
"驾驶小型客车在高速公路超速50%以上,一次记多少分?"
,
"options"
: [
"A. 3分"
,
"B. 6分"
,
"C. 9分"
,
"D. 12分"
],
"answer"
:
"D"
},
{
"question"
:
"代替他人接受交通违法处罚牟取经济利益的,一次记多少分?"
,
"options"
: [
"A. 3分"
,
"B. 6分"
,
"C. 9分"
,
"D. 12分"
],
"answer"
:
"D"
},
{
"question"
:
"驾驶未悬挂机动车号牌的车辆上路行驶,一次记多少分?"
,
"options"
: [
"A. 3分"
,
"B. 6分"
,
"C. 9分"
,
"D. 12分"
],
"answer"
:
"C"
},
{
"question"
:
"驾驶与准驾车型不符的机动车的,一次记多少分?"
,
"options"
: [
"A. 3分"
,
"B. 9分"
,
"C. 6分"
,
"D. 12分"
],
"answer"
:
"B"
},
{
"question"
:
"驾驶7座以上载客汽车超员50%未达100%的,一次记多少分?"
,
"options"
: [
"A. 3分"
,
"B. 6分"
,
"C. 9分"
,
"D. 12分"
],
"answer"
:
"C"
},
{
"question"
:
"驾驶机动车在高速公路占用应急车道行驶的,一次记多少分?"
,
"options"
: [
"A. 3分"
,
"B. 6分"
,
"C. 9分"
,
"D. 2分"
],
"answer"
:
"B"
},
{
"question"
:
"驾驶货车超过最大允许总质量30%未达50%的,一次记多少分?"
,
"options"
: [
"A. 1分"
,
"B. 3分"
,
"C. 6分"
,
"D. 9分"
],
"answer"
:
"C"
},
{
"question"
:
"驾驶证被暂扣期间驾驶机动车的,一次记多少分?"
,
"options"
: [
"A. 3分"
,
"B. 6分"
,
"C. 9分"
,
"D. 12分"
],
"answer"
:
"B"
},
{
"question"
:
"驾驶机动车不避让校车的,一次记多少分?"
,
"options"
: [
"A. 3分"
,
"B. 6分"
,
"C. 9分"
,
"D. 12分"
],
"answer"
:
"B"
},
{
"question"
:
"驾驶机动车时拨打接听手持电话的,一次记多少分?"
,
"options"
: [
"A. 1分"
,
"B. 2分"
,
"C. 3分"
,
"D. 6分"
],
"answer"
:
"C"
},
{
"question"
:
"在高速公路不按规定车道行驶的,一次记多少分?"
,
"options"
: [
"A. 1分"
,
"B. 3分"
,
"C. 6分"
,
"D. 9分"
],
"answer"
:
"B"
},
{
"question"
:
"驾驶机动车在普通道路超速20%未达50%的,一次记多少分?"
,
"options"
: [
"A. 1分"
,
"B. 3分"
,
"C. 6分"
,
"D. 9分"
],
"answer"
:
"B"
},
{
"question"
:
"车辆发生故障未按规定设置警示标志的,一次记多少分?"
,
"options"
: [
"A. 1分"
,
"B. 3分"
,
"C. 6分"
,
"D. 9分"
],
"answer"
:
"B"
},
{
"question"
:
"驾驶机动车未按规定使用灯光的,一次记多少分?"
,
"options"
: [
"A. 1分"
,
"B. 2分"
,
"C. 3分"
,
"D. 不记分"
],
"answer"
:
"A"
},
{
"question"
:
"驾驶摩托车不戴安全头盔的,一次记多少分?"
,
"options"
: [
"A. 1分"
,
"B. 2分"
,
"C. 3分"
,
"D. 6分"
],
"answer"
:
"A"
},
{
"question"
:
"驾驶货车长宽高超过规定的,一次记多少分?"
,
"options"
: [
"A. 1分"
,
"B. 3分"
,
"C. 6分"
,
"D. 9分"
],
"answer"
:
"A"
}
]
wrong_questions
=
[]
def
get_valid_input(options):
valid_choices
=
[option.split(
'.'
)[
0
].upper()
for
option
in
options]
while
True
:
user_input
=
input
(
"请输入选项({})或输入Q退出:"
.
format
(
'/'
.join(valid_choices))).strip().upper()
if
user_input
in
valid_choices:
return
user_input
if
user_input
=
=
"Q"
:
return
None
print
(
"输入无效,请重新输入!"
)
def
practice_questions(question):
print
(
"\n"
+
question[
"question"
])
for
option
in
question[
"options"
]:
print
(option)
user_answer
=
get_valid_input(question[
"options"
])
if
user_answer
is
None
:
return
None
if
user_answer
=
=
question[
"answer"
]:
print
(
"✅ 正确!"
)
return
True
else
:
print
(f
"❌ 错误!正确答案是:{question['answer']}"
)
return
False
def
update_wrong_questions(question):
for
wq
in
wrong_questions:
if
wq[
"question"
]
=
=
question[
"question"
]:
wq[
"correct_streak"
]
=
0
return
new_wrong
=
copy.deepcopy(question)
new_wrong[
"correct_streak"
]
=
0
wrong_questions.append(new_wrong)
while
True
:
print
(
"\n"
+
"="
*
35
)
print
(f
"当前错题数量:{len(wrong_questions)}"
)
print
(
"="
*
35
)
while
wrong_questions:
index
=
random.randrange(
len
(wrong_questions))
current_q
=
wrong_questions[index]
result
=
practice_questions(current_q)
if
result
is
None
:
exit()
if
result:
current_q[
"correct_streak"
]
+
=
1
if
current_q[
"correct_streak"
] >
=
3
:
del
wrong_questions[index]
print
(
"🎉 该题目已掌握,移出错题库!"
)
else
:
current_q[
"correct_streak"
]
=
0
input
(
"按回车继续练习..."
)
break
current_q
=
random.choice(questions)
result
=
practice_questions(current_q)
if
result
is
None
:
break
if
not
result:
update_wrong_questions(current_q)
input
(
"按回车继续练习..."
)