Python循环打印



我有一本这样的字典:

questions ={
'1.Who is Satoshi Nakamoto' : {'answers':{'right_answer':'Pseudonym','wrong_answer':['Bill Gate', 'Elon Musk', 'Warren Buffet']}},
'2.Who is richest' : {'answers':{'right_answer':'Pseudonym','wrong_answer':['Bill Gate', 'Elon Musk', 'Warren Buffet']}}
}

根据字典,我想打印问题和选项值。

这是我使用的代码:

for question in q:
print(question)
answers =([questions[question]['answers']['right_answer']] +questions[question]['answers']['wrong_answer'])
for answer in answers:
print(answer)

生成如下结果:

1.Who is Satoshi Nakamoto
Pseudonym
Bill Gate
Elon Musk
Warren Buffet
2.Who is richer
Pseudonym
Bill Gate
Elon Musk
Warren Buffet

但是我想打印带有项目头A, B, C, D等的选项,像这样:

1.Who is Satoshi Nakamoto
A.Pseudonym
B.Bill Gate
C.Elon Musk
D.Warren Buffet
2.Who is richer
A.Pseudonym
B.Bill Gate
C.Elon Musk
D.Warren Buffet
也许有人能帮我这个忙。非常感谢!

您想使用string库的ascii大写字母和zip()来枚举您的答案:

import string
answers = ['Pseudonym', 'Bill Gate', 'Elon Musk', 'Warren Buffet']
for bullet, answer in zip(string.ascii_uppercase, answers):
print(f"{bullet}. {answer}")

zip()将获取一定数量的列表(或其他集合)并将每个集合的第一个元素分组,然后是第二个,然后是第三个,依此类推。所以,zip([1,2,3], ['a','b','c'])会得到[(1, 'a'), (2, 'b'), (3, 'c')]。然后,for循环解包每个元组,并使它们可用于print语句的f-string。

这会产生以下结果:

>>> answers = ['Pseudonym', 'Bill Gate', 'Elon Musk', 'Warren Buffet']
>>> for bullet, answer in zip(string.ascii_uppercase, answers):
...     print(f"{bullet}. {answer}")
...
A. Pseudonym
B. Bill Gate
C. Elon Musk
D. Warren Buffet

我重新设计了questions的结构,因为我觉得它不好。制作questions列表允许我们对问题进行洗牌,这样它们就不会总是以相同的顺序出现。我把答案也打乱了,这样正确的答案就不会总是在第一个位置。

import random
import string
questions = [
{'question': 'Who is Satoshi Nakamoto',
'right_answer': 'Pseudonym',
'wrong_answers': ['Bill Gate', 'Elon Musk', 'Warren Buffet']},
{'question': 'Who is richest',
'right_answer': 'Pseudonym',
'wrong_answers': ['Bill Gates', 'Elon Musk', 'Warren Buffet']}]
random.shuffle(questions)
for i, entry in enumerate(questions, start=1):
all_answers = entry['wrong_answers'] + [entry['right_answer']]
random.shuffle(all_answers)
print(f'{i}. {entry["question"]}')
for letter, answer in zip(string.ascii_uppercase, all_answers):
print(f'  {letter}. {answer}')

可能的结果:

1. Who is richest
A. Pseudonym
B. Warren Buffet
C. Bill Gates
D. Elon Musk
2. Who is Satoshi Nakamoto
A. Elon Musk
B. Pseudonym
C. Warren Buffet
D. Bill Gate

最新更新