《Python编程快速上手》实例演练第九章

书上的缩进令人看不懂,且多有错误,故手打了一遍,重新调整了缩进。

《randomQuizGenerator.py》其中首都的data懒得打35个上去,就打了3个,后面随便编造。

# python 3
# randomQuizGenerator.py
# random order, along with the answer key

import random

# The quiz data .Keys are states and values are their capitals.
capitals = {'Alabama': 'Montgomery', 'Alaska': 'Jnueau', 'Arizona': 'Phoenix',
            '4': '4', '5': '5', '6': '6', '7': '7', '8': '8', '9': '9', '10': '10'}

# Generate 35 quiz files.
for quizNum in range(35):
    # 创建试卷文件,以写模式打开文件
    quizFile = open(f'D:\\Quiz\\capitalsquiz{quizNum + 1 }.txt', 'w')
    answerKeyFile = open(f'capitalsquiz_answers{quizNum + 1}.txt', 'w')
    # f 是可以在字符串中直接加入变量,用花括号装起。
    # quizNum 是唯一编号,quizNUm+1是什么意思?仅是因为for以0开头吗#yes
    # w表示以写模式打开文件

    quizFile.write('Name:\n\nDate:\n\nPeriod:\n\n')  # 文件内容第一行
    quizFile.write((''*20) + f'State Capitals Quiz(Form{quizNum +1})')  # 文件标题
    quizFile.write('\n\n')

    states = list(capitals.keys())  # 文件主体,元组
    random.shuffle(states)  # 创建stata中key的随机列表

    for questionNum in range(10):
        # capitals中,关于states的对应values
        correctAnswer = capitals[states[questionNum]]
        wrongAnswers = list(capitals.values())  # 从capitals中复制所有的值
        del wrongAnswers[wrongAnswers.index(correctAnswer)]  # delete 正确答案
        wrongAnswers = random.sample(wrongAnswers, 3)  # 随机选择3个无正确答案的值
        answerOptions = wrongAnswers+[correctAnswer]  # 3个错误答案加1个正确答案
        random.shuffle(answerOptions)  # 打乱答案
        # quiz
        quizFile.write(
            f'{questionNum +1}.What is the capital of {states[questionNum]}?\n')  # 问题编号+问题
        for i in range(4):  # 4个选项
            # 以字符串ABCD为列表选择第i个,后跟answerOptions列表
            quizFile.write(f"{'ABCD'[i]}.{answerOptions[i]}\n")
            quizFile.write('\n')
        # answer
        answerKeyFile.write(
            f"{questionNum +1}.{'ABCD'[answerOptions.index(correctAnswer)]}\n")  # 答案文件
    quizFile.close()  # 对应open的tab即可
    answerKeyFile.close()  # 读取或写入文件后要跟close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值