我有代码应该模拟收银机。
我需要帮忙做这个循环。我正在尝试获取一个更新了单位金额值的新数组。因为我的changeArray有3个值是$20。我想添加这3个值,并将UNIT_AMOUNT数组对象更新为[“二十”,60]
,然后将其推送到新数组中。对于changeArray的所有其他实例也是如此。我的newarr不应该有任何与changeArray的值不匹配的对象。
changeArray是我需要交还给客户的更改。因此,我需要一个新数组,该数组具有账单类型和总金额。一开始我确实把它作为一个对象,但我在试图操纵它时遇到了麻烦。所以我把它改成了嵌套数组。
这个练习要求我将最后一个数组输出为嵌套数组:["TWENTY",60]
。
let changeArray = [20, 20, 20, 10, 10, 5, 5, 5, 1, 0.25, 0.25, 0.1, 0.1, 0.1, 0.05, 0.01, 0.01, 0.01, 0.01]
const UNIT_AMOUNT = [ ["ONE HUNDRED", 100.00], ["TWENTY", 20.00], ["TEN", 10.00], ["FIVE", 5.00], ["ONE", 1.00], ["QUARTER", .25], ["DIME", .10], ["NICKEL", .05], ["PENNY", .01] ]
let newarr = []
for (let i = 0; i < changeArray.length; i++) {
for (let element of UNIT_AMOUNT) { if (changeArray[i] == element[1]) {
if (changeArray[i] == changeArray[i + 1]) {
element[1] = element[1] + changeArray[i]
} newarr.push(element)
}
}
console.log(newarr)
所以基本上,您可以在这里做的是首先检查元素是否在UNIT_AMOUNT
内的数组中找到匹配。如果是,您继续检查您的newarr
是否已经拥有它。如果是,只需执行加法,否则只需将数组推送到newarr
。
let changeArray = [20, 20, 20, 10, 10, 5, 5, 5, 1, 0.25, 0.25, 0.1, 0.1, 0.1, 0.05, 0.01, 0.01, 0.01, 0.01]
const UNIT_AMOUNT = [
["ONE HUNDRED", 100.00],
["TWENTY", 20.00],
["TEN", 10.00],
["FIVE", 5.00],
["ONE", 1.00],
["QUARTER", .25],
["DIME", .10],
["NICKEL", .05],
["PENNY", .01]
]
let newarr = []
for (let change of changeArray) {
let obj = UNIT_AMOUNT.find(amount => amount[1] == change);
if (obj) {
let existingObj = newarr.find(amount => amount[0] == obj[0]);
if (existingObj)
existingObj[1] = +parseFloat((existingObj[1] + change) + "").toFixed(2);
else
newarr.push([obj[0], change]);
}
}
console.log(newarr)
类是描述了一组有共同行为的对象。由类描述的对象称为类的一个实例。类指定了其实例拥有的属性(原文为slot卡槽)的名称,而这些属性的值由实例自身来进行填充。类同样也指定了可以应用于其实例的方法(method)。属性值可以是任何形式,但方法的值必须是过程。 类具有继承性。因此,一个类可以是另一个类的子类,我们称另一个类为它的父类。一个子类不仅有它自己“直接的”属性和方法,也会继承它的父类的所有属性和方
顶点数组对象( VAO )是一种特殊类型对象,它封装了与顶点处理器有关的所有数据,它仅仅是记录顶点缓存区和索引缓冲区的引用,以及顶点的各种属性的布局而不是实际的数据。这样做的好处是一旦你为一个 mesh 设置一个 VAO ,你就可以通过简单的绑定 VAO 来导入 mesh 的所有状态。之后你就可以直接渲染 mesh 对象而不需要担心它的状态,VAO 为你记住了它。如果你的程序需要对顶点属性布局不同
到目前为止,你应该已经知道如何用函数来整理代码,以及用内置类型来组织数据了。接下来的一步就是要学习『面向对象编程』了,这种编程方法中,用户可以自定义类型来同时对代码和数据进行整理。面向对象编程是一个很大的题目;要有好几章才能讲出个大概。 本章的样例代码可以在这里来下载,练习题对应的样例代码可以在这里下载。 15.1 用户自定义类型 我们已经用过很多 Python 的内置类型了;现在我们就要来定义一
目前你已经知道如何使用函数来组织你的代码,同时用内置的类型来管理数据。 下一步我们将学习“面向对象编程”,即使用 程序员定义的类来组织代码和数据。 面向对象编程是一个很大的话题,讲完需要一些章节。 本章的示例代码可以在http://thinkpython2.com/code/Point1.py 获取; 练习题的答案可以在http://thinkpython2.com/code/Point1_sol
12.5.1 通过 @ISA 继承 如果 @ISA 包含多于一个包的名字,包的搜索都是从左向右的顺序进行的。这些搜索是由浅 入深的,因此,如果你有一个 Mule 类有象下面这样的继承关系: package Mule; our @ISA= ("Horse", "Donkey"); Perl 将首先在 Horse 里(和他的任何前辈类里,比如 Critter)查找任何在 Mule 里找
首先,你需要理解包和模块;请看第十章,包,和第十一章,模块。你还需要知道引用和 数据结构;参阅第八章,引用和第九章,数据结构。同样,知道一些面向对象的编程方法 (OOP)也是很有用的,所以下一节开始我们给就 OOL(面向对象的语言)上一小节课。 12.1 简单复习一下面向对象的语言 对象是一个数据结构,带有一些行为。我们通常把这些行为称为对象的直接动作,有时候 可以把这些对象拟人化。比如,我们可能