首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python循环打印

Python循环打印
EN

Stack Overflow用户
提问于 2022-06-16 16:05:26
回答 2查看 43关注 0票数 0

我有一本这样的字典:

代码语言:javascript
复制
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']}}

}

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

这是我使用的代码:

代码语言:javascript
复制
for question in q:
  print(question)
  answers =([questions[question]['answers']['right_answer']] +questions[question]['answers']['wrong_answer'])
  for answer in answers:
    print(answer)

这产生的结果如下:

代码语言:javascript
复制
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等的选项,如下所示:

代码语言:javascript
复制
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

也许有人能帮我。非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2022-06-16 16:16:31

您希望使用string库的ascii大写和zip()来枚举您的答案:

代码语言:javascript
复制
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循环解压缩每个元组,并使它们可用于打印语句的f-字符串。

这将产生以下结果:

代码语言:javascript
复制
>>> 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
票数 2
EN

Stack Overflow用户

发布于 2022-06-16 16:21:55

我重新设计了questions的结构,因为我不认为它很好。让questions成为一个列表,可以让我们对问题进行洗牌,这样它们就不会总是以相同的顺序出现。我把答案也弄乱了,这样正确的答案就不会总是排在第一位。

代码语言:javascript
复制
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}')

可能的结果:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72648807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档