2018-02-09 新闻、对冒泡排序中for循环嵌套的理解、AugularJS-指令、Pygame编写游戏《外星人入侵》、 JS数组

第一组:姚成栋 新闻

今天没什么干货要给大家的,只想给大家看一个新闻,更精确的说是想给大家介绍一个人。首先简单讲了一下这条新闻:
北京时间2月7日,“猎鹰重型”运载火箭从美国佛罗里达州肯尼迪航天中心发射升空。太空探索技术公司(SpaceX)官网、美国全国广播公司网站、哥伦比亚广播公司网站7日消息称,“猎鹰重型”火箭首次发射成功,标志着人类商业太空探索的重大突破。火箭两个助推器同时完成回收,芯级火箭海上平台回收失败。但首射成功这一至关重要的动作,仍让该火箭夺下当今航天界“运载火箭之王”的桂冠。这是人类首次实现重型火箭助推器回收。以往的所有的太空探索所使用的火箭皆一次性使用,不仅发射费用高昂,同时还造成了大量的太空垃圾。

而此次火箭发射的核心人物正是我想给大家介绍的人——Elon Musk。有人说他是白日梦想家,也有人说他是当代爱迪生,真人版“钢铁侠”。在燃油车大行其道的21世纪初,马斯克看到燃油带来严重的环境污染,于是决心创办使用环保清洁能源的特斯拉电动汽车。最困难的时候公司只剩下两三个人,为了不让特斯拉破产,他想尽办法让特斯拉上市。却被华尔街评为“最不可能成功的公司”,电视节目上被主持人公然嘲笑说“大家都不应该买特斯拉的股票!”。然而他却成功连本带利还清了4亿美金的贷款,而一开始被大家看好的老牌厂商通用和福特却一直拖欠。他成功地狙击了各大汽车厂商,让特斯拉成为新能源车的代名词。

看过特斯拉车子人肯定会被惊讶到,这么高科技的车。在自动驾驶还处于大多数厂商的研发测试阶段时,特斯拉已经能成熟地运用。特别是model X的鹰翼门设计,使第二、三排乘客即使在狭窄的泊车环境中也能轻松进出车厢,与传统 SUV 车门和 MPV 滑动门相比,提供了前所未有的便利。值得一提的是他的鹰翼门上有无数的传感器,即使你在很窄的车位或者很矮的地方停车时也不会平道周边。

有人说马斯克是贾跃亭,也有人说他是乔布斯,而我认为,他和他们都不一样。他有贾跃亭的梦想,但他不会做白日梦。他也有乔布斯的着眼于现实的革命,但他比乔更多的是展望于未来,热衷创造新的赛道。


第二组:冯佳丽 对冒泡排序中for循环嵌套的理解(BubbleSort)

——转载

1. 冒泡排序

冒泡排序是把无序的数据按从小到大的顺序进行排列。就像它本身的命名一样,把数组中小的数据值依次往前(或向上)推进,确保数组0下标的数据值为整组中最小的数值。

2. 冒泡排序代码
1.  //冒泡排序  
2.  public class BubbleSort {  
3.      public static void sort(int[] array){  
4.          int temp=0;//临时变量  
5.          for(int i=0;i<array.length-1;i++){ j="array.length-1;j" for(int="" 遍历数组内的全部数据="">i;j--){//用来比较数组内的数据,把最小的数据往前移动  
6.                  if(array[j]<array[j-1]){ pre="" <="" }="" array[j-1]="temp;" array[j]="array[j-1];" temp="array[j];"></array[j-1]){></array.length-1;i++){>  
3. 冒泡中for循环嵌套的理解
array
-5
50
30

假设数组array是[ -5 50 30]的一个无序数组,经过冒泡排序后变成[-5 30 50]。

  1. 第一个for循环是用来控制i来遍历数组内的全部数据。
    i 表示从这个数组下标值为 i 的数据开始进行遍历。
    比如在array数组中,则是从下标值为0的数据 -5 开始,往后进行遍历,一直到数组中的最后一个数据。

  2. 第二个for循环(嵌套在第一个for循环内)是用来比较数据值大小——从最后一个与前一个开始进行循环,到下标值为 i 时结束。
    j 表示从这个数组最大下标值为 j 的数据开始,让这个数据与前一个数据比较大小。
    若最后这个数据小,则交换两个数据的值,然后下标值j-1,进行剩余数据的比较;反之,不改变最后一个数据的值,然后让下标值j-1,进行剩余数据的比较。
    比如在array数组【 -5 50 30】,则从数据30与50开始进行比较,
    因为30<50,交换两者的数据值。那么 a[2] 的数据值为50,a[1] 的数据值为30。
    接着 j- -,比较30与-5,得到a[1]=30,a[0]= - 5。

  3. i 和j 控制了从哪一段区域进行比较
    在每一次大循环(第一个for + 第二个嵌套的for)内,i 控制起始位置,j 控制结束位置。
    假设arrays为[0 80 5 15 50 20],
    第一趟大循环内,所有的比较数据为 {0,80,5,15,50,20} ,
    从数据0开始进行到数据20结束,比较后的结果为 {0,5,80,15,20,50};
    第二趟大循环内,所有的比较数据为 {5,80,15,20,50} ,
    从数据5开始进行到数据50结束,比较后的结果为{5,15,80,20,50};
    第三趟大循环内,所有的比较数据为 {15,80,20,50},
    从数据15开始进行到数据50结束,比较后的结果为{15,20,80,50};
    第四趟大循环内,所有的比较数据为{20,80,50},
    从数据20开始进行到数据50结束,比较后的结果为{20,50,80};
    到这后所有的比较判断结束,输出时就是一个有序的数列了。

  4. 总结
    冒泡排序中最关键是要了解 <冒泡排序原理> 和 <for嵌套中的for分别控制了什么内容>。


第三组:蔡永坚 AugularJS-指令

通过使用模板,我们可以把model和controller中的数据组装起来呈现给浏览器,还可以通过数据绑定,实时更新视图,让我们的页面变成动态的。

模板中可以使用的东西包括以下四种:

  1. 指令(directive):ng提供的或者自定义的标签和属性,用来增强HTML表现力;
  2. 标记(markup):即双大括号{{}},可将数据单向绑定到HTML中;
  3. 过滤器(filter):用来格式化输出数据;
  4. 表单控制:用来增强表单的验证功能。

其中,指令无疑是使用量最大的,ng内置了很多指令用来控制模板,如ng-repeat,ng-class,也有很多指令来帮你完成业务逻辑,如ng-controller,ng-model。

指令的几种使用方式如下:

  • 作为标签:<my-dir></my-dir>
  • 作为属性:<span my-dir="exp"></span>
  • 作为注释:
  • 作为类名:<span class="my-dir: exp;"></span>

其实常用的就是作为标签和属性。

样式相关的指令

既然模板就是普通的HTML,那我首要关心的就是样式的控制,元素的定位、字体、背景色等等如何可以灵活控制。下面来看看常用的样式控制指令。

  1. ng-class
    ng-class用来给元素绑定类名,其表达式的返回值可以是以下三种:
    l 类名字符串,可以用空格分割多个类名,如’class1 class2;
    与ng-class相近的,ng还提供了ng-class-odd、ng-class-even两个指令,用来配合ng-repeat分别在奇数列和偶数列使用对应的类。这个用来在表格中实现隔行换色再方便不过了。

  2. ng-style
    ng-style用来绑定元素的css样式,其表达式的返回值为一个js对象,键为css样式名,值为该样式对应的合法取值。

  3. ng-show,ng-hide
    对于比较常用的元素显隐控制,ng也做了封装,ng-show和ng-hide的值为boolean类型的表达式,当值为true时,对应的show或hide生效。框架会用display:block和display:none来控制元素的显隐。
    表单控件功能相关指令
    对于常用的表单控件功能,ng也做了封装,方便灵活控制。
    ng-checked控制radio和checkbox的选中状态
    ng-selected控制下拉框的选中状态
    ng-disabled控制失效状态
    ng-multiple控制多选
    ng-readonly控制只读状态
    以上指令的取值均为boolean类型,当值为true时相关状态生效,道理比较简单就不多做解释。注意: 上面的这些只是单向绑定,即只是从数据到模板,不能反作用于数据。要双向绑定,还是要使用 ng-model 。


第四组:张元一 Pygame编写游戏《外星人入侵》

五.重构模块game_functions()

import sys
import pygame
from pygame.sprite import Sprite
from alienx import Alien
from bullet import Bullet
from time import sleep

def check_events(ai_settings,screen,states,play_button,ship,aliens,bullets,sb):
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            check_keydown_events(event,ai_settings,screen,ship,bullets)

        elif event.type == pygame.KEYUP:
            check_keyup_events(event,ship)

        elif event.type == pygame.MOUSEBUTTONDOWN:
            mouse_x,mouse_y = pygame.mouse.get_pos()
            check_play_button(states,play_button,mouse_x,mouse_y,ship,aliens,bullets,ai_settings,screen, sb)

def check_play_button(states,play_button,mouse_x,mouse_y,ship,aliens,bullets,ai_settings,screen,sb):
    button_clicked = play_button.rect.collidepoint(mouse_x,mouse_y)
    if button_clicked and not states.game_active:
        ai_settings.initialize_dynamic_settings()
        pygame.mouse.set_visible(False)

        if play_button.rect.collidepoint(mouse_x, mouse_y):
            states.reset_states()
            states.game_active = True
            states.score = 0
            sb.prep_score()
            aliens.empty()
            bullets.empty()

            create_fleet(ai_settings, screen, aliens)
            ship.center_ship()


def check_keydown_events(event,ai_settings,screen,ship,bullets):
    if event.key == pygame.K_RIGHT:
        ship.moving_right = True
    elif event.key == pygame.K_LEFT:
        ship.moving_left = True
    elif event.key == pygame.K_SPACE:
        fire_bullet(ai_settings,screen,ship,bullets)
    elif event.key == pygame.K_q:
        sys.exit()

def fire_bullet(ai_settings,screen,ship,bullets):
    if len(bullets) < ai_settings.bullets_allowed:
        new_bullet = Bullet(ai_settings, screen, ship)
        bullets.add(new_bullet)

def update_bullets(ai_settings, screen, ship, aliens, bullets, states, sb):
    bullets.update()
    collisions = pygame.sprite.groupcollide(bullets,aliens,True,True)

    #记分
    if collisions:
        for aliens in collisions.values():
            states.score += ai_settings.alien_points1*len(aliens)
            sb.prep_score()

    for bullet in bullets.copy():
        if bullet.rect.bottom <= 0 and len(bullets)>0:
            bullets.remove(bullet)
    if len(aliens) == 0:
        bullets.empty()
        ai_settings.increase_speed()
        create_fleet(ai_settings,screen,aliens)


def check_keyup_events(event,ship):
    if event.key == pygame.K_RIGHT:
        ship.moving_right = False
    elif event.key == pygame.K_LEFT:
        ship.moving_left = False

def create_fleet(ai_settings,screen,aliens):
    alien = Alien(ai_settings,screen)
    alien_width = alien.rect.width
    for line_number in range(3):
        for alien_number in range(8):
            alien = Alien(ai_settings,screen)
            alien.x = alien_width + 2*alien_width*alien_number
            alien.rect.x = alien.x
            alien.rect.y = -6 * alien.rect.height + 2 * alien.rect.height * line_number
            if(alien.rect.right < ai_settings.screen_width and alien.rect.left > 0):
                aliens.add(alien)

def update_screen(ai_settings, screen, sb, ship, aliens, bullets, states, play_button):

    screen.fill(ai_settings.bg_color)
    for bullet in bullets.sprites():
        bullet.draw_bullet()
    ship.blitme()
    sb.show_score()
    aliens.draw(screen)
    if not states.game_active:
        play_button.draw_button()
    #让最近绘制的屏幕可见
    pygame.display.flip()

def update_aliens(aliens,ai_settings,ship,states,screen,bullets):
    aliens.update(ai_settings)
    check_aliens_bottom(ai_settings, states, screen, ship, aliens, bullets)
    if pygame.sprite.spritecollideany(ship,aliens):
        ship_hit(ai_settings, states, screen, ship, aliens, bullets)

def ship_hit(ai_settings,states,screen,ship,aliens,bullets):
    if states.ship_left > 0:
        states.ship_left -= 1
        aliens.empty()
        bullets.empty()

        create_fleet(ai_settings, screen, aliens)
        ship.center_ship()

        sleep(0.5)
    else:
        states.game_active = False
        pygame.mouse.set_visible(True)


def check_aliens_bottom(ai_settings,states,screen,ship,aliens,bullets):
    screen_rect = screen.get_rect()
    for alien in aliens.sprites():
        if alien.rect.bottom >= screen_rect.bottom:
            ship_hit(ai_settings,states,screen,ship,aliens,bullets)
            break

此文件中包括了对键盘事件的监听等游戏逻辑处理
完整项目见github:
https://github.com/Frued/Python-Alien


第五组:陈孚楠 JS数组

JavaScript中创建数组有两种方式

(一)使用 Array 构造函数:

var arr1 = new Array(); //创建一个空数组
var arr2 = new Array(20); // 创建一个包含20项的数组
var arr3 = new Array("lily","lucy","Tom"); // 创建一个包含3个字符串的数组

(二)使用数组字面量表示法:

var arr4 = []; //创建一个空数组
var arr5 = [20]; // 创建一个包含1项的数组
var arr6 = ["lily","lucy","Tom"]; // 创建一个包含3个字符串的数组

数组的方法有数组原型方法,也有从object对象继承来的方法,这里我们只介绍数组的原型方法,数组原型方法主要有以下这些:

join()
push()和pop()
shift() 和 unshift()
sort()
reverse()
concat()
slice()
splice()
indexOf()和 lastIndexOf()
forEach()
map()
filter()
every()
some()
reduce()和 reduceRight()

我觉得JS数组里最重要得是长度的可扩展性。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,042评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,996评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,674评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,340评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,404评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,749评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,902评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,662评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,110评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,577评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,258评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,848评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,726评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,952评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,271评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,452评论 2 348

推荐阅读更多精彩内容