当前位置: 首页 > news >正文

Kaggle Python练习:使用外部库(Exercise: Working with External Libraries)

文章目录

    • 问题1:坐标轴及标签显示
    • 问题2:赢得比赛的最佳项目并计数
    • 问题3:21点游戏
      • 方法1:把超过21点的最后记为0
      • 方法2:把超过21点在最后进行判断
      • 方法3:官方代码与方法2相似

问题1:坐标轴及标签显示

正如你所看到的,他最近运气不佳。他想用一些精选的表情符号沿着在推特上发布这条消息,但是,就像现在看起来的那样,他的追随者可能会觉得很困惑。他问你是否可以帮助他做出以下改变:

添加标题“500次老虎机抽奖的结果”
使y轴从0开始。
将标签“Balance”添加到y轴
在调用type(graph)之后,您可以看到Jimmy的图是类型 matplotlib.axes._subplots.AxesSubplot 。嗯,这是新的。通过调用dir(graph),您会发现三个看起来很有用的方法:.set_title()、.set_ylim()和.set_ylabel()。

使用这些方法根据Jimmy的请求完成函数prettify_graph。我们已经为您检查了第一个请求(设置标题)。

(记住:如果你不知道这些方法的作用,请使用help()函数!)

  • .set_title():设置标题
  • .set_ylim():设置y轴
  • .set_ylabel():设置y轴标签
def prettify_graph(graph):"""Modify the given graph according to Jimmy's requests: add a title, make the y-axisstart at 0, label the y-axis. (And, if you're feeling ambitious, format the tick marksas dollar amounts using the "$" symbol.)"""graph.set_title("Results of 500 slot machine pulls")# Complete steps 2 and 3 here
#     graph.set_title("Results of 500 slot machine pulls")graph.set_ylim(0)graph.set_ylabel("Balance")graph = jimmy_slots.get_graph()
prettify_graph(graph)
graph

在这里插入图片描述
额外好处:您可以对y轴上的数字进行格式设置,使它们看起来像美元金额吗?例如,200美元而不是200美元。

def prettify_graph(graph):graph.set_title("Results of 500 slot machine pulls")# Make the y-axis begin at 0graph.set_ylim(bottom=0)# Label the y-axisgraph.set_ylabel("Balance")# Bonus: format the numbers on the y-axis as dollar amounts# An array of the values displayed on the y-axis (150, 175, 200, etc.)ticks = graph.get_yticks()# Format those values into strings beginning with dollar signnew_labels = ['${}'.format(int(amt)) for amt in ticks]# Set the new labelsgraph.set_yticklabels(new_labels)graph = jimmy_slots.get_graph()
prettify_graph(graph)
graph

在这里插入图片描述

问题2:赢得比赛的最佳项目并计数

Luigi正试图进行分析,以确定在Mario Kart赛道上赢得比赛的最佳项目。他有一些字典列表形式的数据,看起来像…

[
{‘name’: ‘Peach’, ‘items’: [‘green shell’, ‘banana’, ‘green shell’,], ‘finish’: 3},
{‘name’: ‘Bowser’, ‘items’: [‘green shell’,], ‘finish’: 1},
# Sometimes the racer’s name wasn’t recorded
{‘name’: None, ‘items’: [‘mushroom’,], ‘finish’: 2},
{‘name’: ‘Toad’, ‘items’: [‘green shell’, ‘mushroom’], ‘finish’: 1},
]
“items”是参赛者在比赛中获得的所有能量提升物品的列表,“finish”是他们在比赛中的位置(1代表第一名,3代表第三名,等等)。

他写了下面的函数来获取这样的列表,并返回一个字典,将每个条目映射到第一名完成者拾取的次数。

def best_items(racers):# 创建空字典用于存储第一名完成者拾取的次数winner_item_counts = {}for i in range(len(racers)):# 对于列表中每个字典进行操作racer = racers[i]# 如果是第一名if racer['finish'] == 1:# 获取第一名的项目for item in racer['items']:# 如果结果字典中没有该元素,进行创建if item not in winner_item_counts:winner_item_counts[item] = 0# 有该元素则次数加1winner_item_counts[item] += 1# 如果名字未记录,发出警告if racer['name'] is None:print("警告:{}/{}名字为空,未记录! (racer = {})".format((i+1),len(racers),racer['name']))return winner_item_counts sample = [{'name': 'Peach', 'items': ['green shell', 'banana', 'green shell',], 'finish': 3},{'name': 'Bowser', 'items': ['green shell',], 'finish': 1},{'name': None, 'items': ['mushroom',], 'finish': 2},{'name': 'Toad', 'items': ['green shell', 'mushroom'], 'finish': 1},
]
best_items(sample)

问题3:21点游戏

假设我们想创建一个新类型来表示21点中的手牌。我们可能想对这种类型做的一件事是重载比较运算符,如>和<=,以便我们可以使用它们来检查一只手是否击败另一只手。如果我们能做到这一点,那就太酷了:

hand1 = BlackjackHand([‘K’, ‘A’])
hand2 = BlackjackHand([‘7’, ‘10’, ‘A’])
hand1 > hand2
True

好吧,我们不会在这个问题中完成所有这些(定义自定义类有点超出了这些课程的范围),但是我们要求您在下面的函数中编写的代码与我们定义自己的BlackjackHand类时必须编写的代码非常相似。(We我把它放在__gt__magic方法中,为>定义我们的自定义行为。)

根据文档字符串填充blackjack_hand_greater_than函数体

方法1:把超过21点的最后记为0

1、首先定义一个21点的计数函数BlackjackHand(hand)

def BlackjackHand(hand):count = 0A_count = 0# 进行遍历,如果为A,J,Q,K中的其中一个,加各自对应的数# 若为1~10,则加int(x)for x in hand:if x == 'A':A_count = A_count + 1count = count + 11continueif (x == 'J' or  x == 'Q' or x == 'K'):count = count + 10continueelse:count = count + int(x)# 判断        if A_count == 0 and count <= 21:count = countelif A_count == 0 and count > 21:count = 0elif A_count > 0 and count <= 21:count = countelif A_count > 0 and count > 21:for i in range(A_count):count = count - 10if count <= 21:count = countif count > 21:count = 0return count# 测试
print(BlackjackHand(['K']))
print(BlackjackHand(['3', '4']))
print(BlackjackHand(['10']))
print(BlackjackHand(['K', 'K', '2']))
print(BlackjackHand(['A', 'A', '9']))
print(BlackjackHand(['A', 'A', '9', '3']))
print(BlackjackHand(['9','Q',' 8','A']))

在这里插入图片描述
2、最终代码

def blackjack_hand_greater_than(hand_1, hand_2):"""Return True if hand_1 beats hand_2, and False otherwise.In order for hand_1 to beat hand_2 the following must be true:- The total of hand_1 must not exceed 21- The total of hand_1 must exceed the total of hand_2 OR hand_2's total must exceed 21Hands are represented as a list of cards. Each card is represented by a string.When adding up a hand's total, cards with numbers count for that many points. Facecards ('J', 'Q', and 'K') are worth 10 points. 'A' can count for 1 or 11.When determining a hand's total, you should try to count aces in the way that maximizes the hand's total without going over 21. e.g. the total of ['A', 'A', '9'] is 21,the total of ['A', 'A', '9', '3'] is 14.Examples:>>> blackjack_hand_greater_than(['K'], ['3', '4'])True>>> blackjack_hand_greater_than(['K'], ['10'])False>>> blackjack_hand_greater_than(['K', 'K', '2'], ['3'])False"""if BlackjackHand(hand_1) > BlackjackHand(hand_2):return Trueelse:return Falsedef BlackjackHand(hand):count = 0A_count = 0for x in hand:if x == 'A':A_count = A_count + 1count = count + 11continueif (x == 'J' or  x == 'Q' or x == 'K'):count = count + 10continueelse:count = count + int(x)if A_count == 0 and count <= 21:count = countelif A_count == 0 and count > 21:count = 0elif A_count > 0 and count <= 21:count = countelif A_count > 0 and count > 21:for i in range(A_count):count = count - 10if count <= 21:count = countif count > 21:count = 0return count

方法2:把超过21点在最后进行判断

1、首先定义一个21点的计数函数BlackjackHand(hand)

def BlackjackHand(hand):count = 0A_count = 0for x in hand:if x == 'A':A_count = A_count + 1count = count + 11continueif (x == 'J' or  x == 'Q' or x == 'K'):count = count + 10continueelse:count = count + int(x)if A_count > 0 and count > 21:for i in range(A_count):count = count - 10if count <= 21:count = countif count > 21:count = countreturn count# 测试
print(BlackjackHand(['K']))
print(BlackjackHand(['3', '4']))
print(BlackjackHand(['10']))
print(BlackjackHand(['K', 'K', '2']))
print(BlackjackHand(['A', 'A', '9']))
print(BlackjackHand(['A', 'A', '9', '3']))
print(BlackjackHand(['9','Q',' 8','A']))

超过21点不变,等到最后进行判断为False
在这里插入图片描述
2、最终代码

def blackjack_hand_greater_than(hand_1, hand_2):"""如果hand_1打败hand_2返回True,否则返回False。为了使hand_1打败hand_2,以下条件必须成立:—hand_1的总数不能超过21—hand_1的总和必须大于hand_2的总和,或者hand_2的总和必须大于21手牌被表示为一张牌的列表。每张卡片由一个字符串表示。当把一手牌的总牌数加起来时,带有数字的牌就会得到相应的点数。脸卡片(“J”、“Q”和“K”)值10分。“A”可以数1或11。当决定一手牌的总数时,你应该尝试用下面的方法来计算a在不超过21的情况下最大化手牌总数。例如,['A', 'A', '9']的总数是21,['A', 'A', '9', '3']的总数是14。Examples:>>> blackjack_hand_greater_than(['K'], ['3', '4'])True>>> blackjack_hand_greater_than(['K'], ['10'])False>>> blackjack_hand_greater_than(['K', 'K', '2'], ['3'])False"""  if (BlackjackHand(hand_1)<=21) and (BlackjackHand(hand_1) > BlackjackHand(hand_2)) or (BlackjackHand(hand_1)<=21 and BlackjackHand(hand_2)>21):return Trueelse:return Falsedef BlackjackHand(hand):# 定义总数和'A'的数量count = 0A_count = 0# for x in hand:if x == 'A':A_count = A_count + 1count = count + 11continueif (x == 'J' or  x == 'Q' or x == 'K'):count = count + 10continueelse:count = count + int(x)# 判断        if A_count > 0 and count > 21:for i in range(A_count):count = count - 10if count <= 21:count = countif count > 21:count = countreturn count

方法3:官方代码与方法2相似

def hand_total(hand):"""Helper function to calculate the total points of a blackjack hand."""total = 0# 计算a的数量,并在最后处理如何使用它们aces = 0for card in hand:if card in ['J', 'Q', 'K']:total += 10elif card == 'A':aces += 1else:# Convert number cards (e.g. '7') to intstotal += int(card)# At this point, total is the sum of this hand's cards *not counting aces*.# 添加a,现在把它们记为1。这是我们从这只手能得到的最小的总数total += aces# 把a从1 “升级”到11只要它能帮我们接近21# without bustingwhile total + 10 <= 21 and aces > 0:# Upgrade an ace from 1 to 11total += 10aces -= 1return totaldef blackjack_hand_greater_than(hand_1, hand_2):total_1 = hand_total(hand_1)total_2 = hand_total(hand_2)return total_1 <= 21 and (total_1 > total_2 or total_2 > 21)

简化:

  • if card in ['J', 'Q', 'K']:
  • 在这里插入图片描述

相关文章:

Kaggle Python练习:使用外部库(Exercise: Working with External Libraries)

文章目录 问题1&#xff1a;坐标轴及标签显示问题2&#xff1a;赢得比赛的最佳项目并计数问题3&#xff1a;21点游戏方法1&#xff1a;把超过21点的最后记为0方法2&#xff1a;把超过21点在最后进行判断方法3&#xff1a;官方代码与方法2相似 问题1&#xff1a;坐标轴及标签显示…...

React 子组件调用父组件的方法,以及互相传递数据

<script type"text/babel" data-type"module"> import React, { StrictMode, useState } from react; import { createRoot } from react-dom/client;const ParentComponent () > {const [message, setMessage] useState("")//父组件…...

爬虫基础---python爬虫系列2

爬虫基础 文章目录 爬虫基础爬虫简介爬虫的用途爬虫的合法性规避风险看懂协议反爬机制反反爬策略 认识HTTPHTTP协议--HyperText Transfer ProtocolHTML--HyperText Markup LanguageHTTPS如何查看网站是什么协议呢使用端口号 URL组成部分详解常用的请求- Request Method常见的请…...

jmeter在beanshell中使用props.put()方法的注意事项

在jmeter中&#xff0c;通常使用beanshell去处理一些属性的设置和获取的操作&#xff0c;而这些操作也是有一定的规则的。 1. 设置属性时&#xff0c;在属性名上要加双引号&#xff0c;这代表它不是一个需要用var去声明的变量 这种设置属性的方式才是有效可行的&#xff0c;在…...

息肉检测数据集 yolov5 yolov8适用于目标检测训练已经调整为yolo格式可直接训练yolo网络

息肉检测数据集 yolov5 yolov8格式 息肉检测数据集介绍 数据集概述 名称&#xff1a;息肉检测数据集&#xff08;基于某公开的分割数据集调整&#xff09;用途&#xff1a;适用于目标检测任务&#xff0c;特别是内窥镜图像中的息肉检测格式&#xff1a;YOLO格式&#xff08;边…...

通过API进行Milvus实例配置

更新Milvus各个组件的配置参数。 调试 您可以在OpenAPI Explorer中直接运行该接口&#xff0c;免去您计算签名的困扰。运行成功后&#xff0c;OpenAPI Explorer可以自动生成SDK代码示例。 ​编辑调试 授权信息 下表是API对应的授权信息&#xff0c;可以在RAM权限策略语句的…...

Excelize 开源基础库 2.9.0 版本正式发布

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库&#xff0c;基于 ECMA-376&#xff0c;ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Excel、WPS、OpenOffice 等办公软件创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式&#xf…...

人脸识别-特征算法

文章目录 一、LBPH算法1.基本原理2.实现步骤3.代码实现 二、Eigenfaces算法1.特点2.代码实习 三、FisherFaces算法1.算法原理2.算法特点3.代码实现 四、总结 人脸识别特征识别器是数字信息发展中的一种生物特征识别技术&#xff0c;其核心在于通过特定的算法和技术手段&#xf…...

C++【内存管理】(超详细讲解C++内存管理以及new与delete的使用和原理)

文章目录 1.C/C内存分布2.C语言中动态内存管理方式3.C内存管理方式3.1 new/delete操作内置类型3. 2new/delete操作自定义类型 4. operator new与operator delete函数&#xff08;重点&#xff09;5. new和delete的实现原理5.1 内置类型5.2 自定义类型5.2.1 自定义类型调用new[]…...

elementUi el-table 表头高度异常问题

1、现象 在同一个页面通过状态切换不同table时&#xff0c;当从有合并标头行的table切换到无合并表头的table时&#xff0c;无合并表头的table的表头的高度异常了&#xff0c;如下图 切换后 2、解决 给每个el-table 加上一个唯一的key <el-table key"1"></…...

kubekey的应用

随着 Kubernetes 社区的不断发展&#xff0c;即将迎来 Kubernetes 1.30 版本的迭代。在早先的 1.24 版本中&#xff0c;社区作出一个重要决策&#xff1a;不再默认集成 Docker 作为容器运行时&#xff0c;即取消了对 Docker 的默认支持。这就像咱们家厨房换了个新灶头&#xff…...

如何识别并分类转录因子的家族

愿武艺晴小朋友一定得每天都开心 当我们有了差异表达的转录因子列表以后,接下来可能就想知道这些转录因子的家族分布情况是怎样的?有没有1-2个Family在其中起主要作用,占比较多。 基于这种需求,可以按以下几步来实现: 1)从AnimalTFDB4转录因子数据库中,根据需要…...

【C++11】可变模板参数详解

个人主页&#xff1a;chian-ocean 文章专栏 C 可变模板参数详解 1. 引言 C模板是现代C编程中一个非常强大且灵活的工具。在C11标准中&#xff0c;引入了可变模板参数&#xff08;variadic templates&#xff09;&#xff0c;它为模板编程带来了革命性改变。它的出现允许我们…...

本地群晖NAS安装phpMyAdmin管理MySQ数据库实战指南

文章目录 前言1. 安装MySQL2. 安装phpMyAdmin3. 修改User表4. 本地测试连接MySQL5. 安装cpolar内网穿透6. 配置MySQL公网访问地址7. 配置MySQL固定公网地址8. 配置phpMyAdmin公网地址9. 配置phpmyadmin固定公网地址 前言 本文主要介绍如何在群晖NAS安装MySQL与数据库管理软件p…...

QTableWidget 接口详情

Qt Widgets->C Classes->QTableWidget Qt 5.12版本QTableWidget接口详情&#xff08;机翻&#xff09; QTableWidget类提供了一个带有默认模型的基于项的表视图。 属性 列数columnCount : int 行数rowCount : int 细节描述 QTableWidget类提供了一个带有默认模型的基…...

GESP CCF python四级编程等级考试认证真题 2024年9月

一、单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 据有关资料&#xff0c;山东大学于1972年研制成功DJL-1计算机&#xff0c;并于1973年投入运行&#xff0c;其综合性能居当时全国第三位。DJL-1计算机运算控制部分所使用的磁心存储元件由磁心颗粒组成…...

oracle数据库名实例名服务名

Oracle数据库是一个复杂的系统&#xff0c;它包含多个组件&#xff0c;包括数据库服务器、实例和服务。 数据库名&#xff08;DB_NAME&#xff09;&#xff1a;这是数据库的内部名称&#xff0c;通常在创建数据库时指定&#xff0c;并在整个数据库生命周期内保持不变。 实例名…...

python+appium+雷电模拟器安卓自动化及踩坑

一、环境安装 环境&#xff1a;window11 1.1 安装Android SDK AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载 这里面任选一个就可以&#xff0c;最终下载完主要要安装操作安卓的工具adb&#xff0c;安装这个步骤的前提是要…...

Python第七八次作业

1.输入一个大于0的正整数n&#xff0c;如果n 1 ,则返回1&#xff0c; 如果n是偶数&#xff0c;则返回 n // 2 &#xff0c;如果n是奇数&#xff0c;则返回 3n 1&#xff0c;将所有的返回值存放到一个列表中&#xff0c;注意&#xff1a;n是第一个元素&#xff0c;其他的元素根…...

Leetcode——数组:螺旋矩阵59.螺旋矩阵

题目 思路 对于每层&#xff0c;从左上方开始以顺时针的顺序填入所有元素。假设当前层的左上角位于 (top,left)&#xff0c;右下角位于 (bottom,right)&#xff0c;按照如下顺序填入当前层的元素。 从左到右填入上侧元素&#xff0c;依次为 (top,left) 到 (top,right)。 从上到…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...