吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1264|回复: 10
收起左侧

[求助] 关于慕课python的一段代码问题

[复制链接]
雷欧库珀 发表于 2021-3-5 20:19
本帖最后由 雷欧库珀 于 2021-3-5 20:19 编辑

https://www.icourse163.org/learn ... 3449#/learn/content
第八周的实例13,老师的代码直接复杂粘贴运行结果和视频一样,但是如果换成我自己敲的,却很不一样。

老师的代码
[Python] 纯文本查看 复制代码
# MatchAnalysis.py
from random import random


def printIntro():
    print("这个程序模拟两个选手A和B的某种竞技比赛")
    print("程序运行需要A和B的能力值(以0到1之间的小数表示)")


def getInputs():
    a = eval(input("请输入选手A的能力值(0-1): "))
    b = eval(input("请输入选手B的能力值(0-1): "))
    n = eval(input("模拟比赛的场次: "))
    return a, b, n


def simNGames(n, probA, probB):
    winsA, winsB = 0, 0
    for i in range(n):
        scoreA, scoreB = simOneGame(probA, probB)
        if scoreA > scoreB:
            winsA += 1
        else:
            winsB += 1
    return winsA, winsB


def gameOver(a, b):
    return a == 15 or b == 15


def simOneGame(probA, probB):
    scoreA, scoreB = 0, 0
    serving = "A"
    while not gameOver(scoreA, scoreB):
        if serving == "A":
            if random() < probA:
                scoreA += 1
            else:
                serving = "B"
        else:
            if random() < probB:
                scoreB += 1
            else:
                serving = "A"
    return scoreA, scoreB


def printSummary(winsA, winsB):
    n = winsA + winsB
    print("竞技分析开始,共模拟{}场比赛".format(n))
    print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA / n))
    print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB / n))


def main():
    printIntro()
    probA, probB, n = getInputs()
    winsA, winsB = simNGames(n, probA, probB)
    printSummary(winsA, winsB)


main()

老师的直接运行结果

老师的代码结果

老师的代码结果

我的代码
[Python] 纯文本查看 复制代码
from random import random


def printIntro():
    print("这个程序模拟两个选手A和B的某种竟技比赛")
    print("程序运行需要A和B的能力值(以0到1之间的小数表示)")


def getInputs():
    a = eval(input("请输入选手A的能力值(0-1): "))
    b = eval(input("请输入选手b的能力值(0-1): "))
    n = eval((input("模拟比赛场次: ")))
    return a, b, n


def simNGames(n, probA, probB):
    winsA, winsB = 0, 0
    for i in range(n):
        scoreA, scoreB = simOneGame(probA, probB)
        if scoreA > scoreB:
            winsA += 1
    else:
        winsB += 1
    return winsA, winsB


def gameOver(a, b):
    return a == 15 or b == 15


def simOneGame(probA, probB):
    scoreA, scoreB = 0, 0
    serving = "A"
    while not gameOver(scoreA, scoreB):
        if serving == "A":
            if random() < probA:
                scoreA += 1
            else:
                serving = "B"
        else:
            if random() < probB:
                scoreB += 1
            else:
                serving = "A"
    return scoreA, scoreB


def printSummary(winsA, winsB):
    n = winsA + winsB
    print("竞技分析开始,共模拟{}场比赛".format(n))
    print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA / n))
    print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB / n))


def main():
    printIntro()
    probA, probB, n = getInputs()
    winsA, winsB = simNGames(n, probA, probB)
    printSummary(winsA, winsB)


main()

这是我的结果

我的结果

我的结果

这是两个文件链接
https://wws.lanzouj.com/ib3fLmjvkpc




发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 雷欧库珀 发表于 2021-3-5 20:20
难道是随机数种子的原因嘛?
离人心上秋意浓 发表于 2021-3-5 20:25
丢代码编辑器里面对比下哪里有差异就大概知道了。
llyy390 发表于 2021-3-5 20:40
        if scoreA > scoreB:
            winsA += 1
    else:
        winsB += 1

这块缩进有问题! 修改缩进就Ok了。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
雷欧库珀 + 1 + 1 谢谢@Thanks!

查看全部评分

左手MJ 发表于 2021-3-5 20:49
红色部分,左边是老师的代码,右边的是你写的

你看吧!

你看吧!

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
雷欧库珀 + 1 + 1 谢谢@Thanks!
Paranoid丶 + 1 + 1 对比简单粗暴,另外python中除了有if-else也有for-else,所以代码缩进少了.

查看全部评分

左手MJ 发表于 2021-3-5 20:50
左手MJ 发表于 2021-3-5 20:49
红色部分,左边是老师的代码,右边的是你写的

楼上说的缩进位置也是不一样
Cool_Breeze 发表于 2021-3-5 21:03
[Python] 纯文本查看 复制代码
def simNGames(n, probA, probB):
    winsA, winsB = 0, 0
    for i in range(n):
        scoreA, scoreB = simOneGame(probA, probB)
        if scoreA > scoreB:
            winsA += 1
        else: #缩进对齐if
            winsB += 1
    return winsA, winsB
 

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
雷欧库珀 + 1 + 1 谢谢@Thanks!

查看全部评分

fanvalen 发表于 2021-3-5 21:12
[Python] 纯文本查看 复制代码
    a = eval(input("请输入选手A的能力值(0-1): "))
    b = eval(input("请输入选手b的能力值(0-1): "))
    n = eval((input("模拟比赛场次: ")))


检查这三句
括号大小不一
下面还多了一重括号
fanvalen 发表于 2021-3-5 21:16
fanvalen 发表于 2021-3-5 21:12
[mw_shl_code=python,true]    a = eval(input("请输入选手A的能力值(0-1): "))
    b = eval(input("请 ...

对还有缩进 空格不一建议按tab来
 楼主| 雷欧库珀 发表于 2021-3-6 21:44
左手MJ 发表于 2021-3-5 20:49
红色部分,左边是老师的代码,右边的是你写的

这个对比差异怎么弄,在pycharm里
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 06:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表