第一組:姚成棟 新聞
今天沒(méi)什么干貨要給大家的诀浪,只想給大家看一個(gè)新聞棋返,更精確的說(shuō)是想給大家介紹一個(gè)人。首先簡(jiǎn)單講了一下這條新聞:
北京時(shí)間2月7日雷猪,“獵鷹重型”運(yùn)載火箭從美國(guó)佛羅里達(dá)州肯尼迪航天中心發(fā)射升空睛竣。太空探索技術(shù)公司(SpaceX)官網(wǎng)、美國(guó)全國(guó)廣播公司網(wǎng)站求摇、哥倫比亞廣播公司網(wǎng)站7日消息稱射沟,“獵鷹重型”火箭首次發(fā)射成功,標(biāo)志著人類商業(yè)太空探索的重大突破与境⊙楹唬火箭兩個(gè)助推器同時(shí)完成回收,芯級(jí)火箭海上平臺(tái)回收失敗摔刁。但首射成功這一至關(guān)重要的動(dòng)作挥转,仍讓該火箭奪下當(dāng)今航天界“運(yùn)載火箭之王”的桂冠。這是人類首次實(shí)現(xiàn)重型火箭助推器回收共屈。以往的所有的太空探索所使用的火箭皆一次性使用绑谣,不僅發(fā)射費(fèi)用高昂,同時(shí)還造成了大量的太空垃圾拗引。
而此次火箭發(fā)射的核心人物正是我想給大家介紹的人——Elon Musk借宵。有人說(shuō)他是白日夢(mèng)想家,也有人說(shuō)他是當(dāng)代愛(ài)迪生寺擂,真人版“鋼鐵俠”暇务。在燃油車大行其道的21世紀(jì)初泼掠,馬斯克看到燃油帶來(lái)嚴(yán)重的環(huán)境污染,于是決心創(chuàng)辦使用環(huán)保清潔能源的特斯拉電動(dòng)汽車垦细。最困難的時(shí)候公司只剩下兩三個(gè)人择镇,為了不讓特斯拉破產(chǎn),他想盡辦法讓特斯拉上市括改。卻被華爾街評(píng)為“最不可能成功的公司”腻豌,電視節(jié)目上被主持人公然嘲笑說(shuō)“大家都不應(yīng)該買特斯拉的股票!”嘱能。然而他卻成功連本帶利還清了4億美金的貸款吝梅,而一開始被大家看好的老牌廠商通用和福特卻一直拖欠。他成功地狙擊了各大汽車廠商惹骂,讓特斯拉成為新能源車的代名詞苏携。
看過(guò)特斯拉車子人肯定會(huì)被驚訝到,這么高科技的車对粪。在自動(dòng)駕駛還處于大多數(shù)廠商的研發(fā)測(cè)試階段時(shí)右冻,特斯拉已經(jīng)能成熟地運(yùn)用。特別是model X的鷹翼門設(shè)計(jì)著拭,使第二纱扭、三排乘客即使在狹窄的泊車環(huán)境中也能輕松進(jìn)出車廂,與傳統(tǒng) SUV 車門和 MPV 滑動(dòng)門相比儡遮,提供了前所未有的便利乳蛾。值得一提的是他的鷹翼門上有無(wú)數(shù)的傳感器,即使你在很窄的車位或者很矮的地方停車時(shí)也不會(huì)平道周邊鄙币。
有人說(shuō)馬斯克是賈躍亭肃叶,也有人說(shuō)他是喬布斯,而我認(rèn)為十嘿,他和他們都不一樣被环。他有賈躍亭的夢(mèng)想,但他不會(huì)做白日夢(mèng)详幽。他也有喬布斯的著眼于現(xiàn)實(shí)的革命筛欢,但他比喬更多的是展望于未來(lái),熱衷創(chuàng)造新的賽道唇聘。
第二組:馮佳麗 對(duì)冒泡排序中for循環(huán)嵌套的理解(BubbleSort)
——轉(zhuǎn)載
1. 冒泡排序
冒泡排序是把無(wú)序的數(shù)據(jù)按從小到大的順序進(jìn)行排列版姑。就像它本身的命名一樣,把數(shù)組中小的數(shù)據(jù)值依次往前(或向上)推進(jìn)迟郎,確保數(shù)組0下標(biāo)的數(shù)據(jù)值為整組中最小的數(shù)值剥险。
2. 冒泡排序代碼
1. //冒泡排序
2. public class BubbleSort {
3. public static void sort(int[] array){
4. int temp=0;//臨時(shí)變量
5. for(int i=0;i<array.length-1;i++){ j="array.length-1;j" for(int="" 遍歷數(shù)組內(nèi)的全部數(shù)據(jù)="">i;j--){//用來(lái)比較數(shù)組內(nèi)的數(shù)據(jù),把最小的數(shù)據(jù)往前移動(dòng)
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循環(huán)嵌套的理解
array
-5
50
30
假設(shè)數(shù)組array是[ -5 50 30]的一個(gè)無(wú)序數(shù)組宪肖,經(jīng)過(guò)冒泡排序后變成[-5 30 50]表制。
第一個(gè)for循環(huán)是用來(lái)控制i來(lái)遍歷數(shù)組內(nèi)的全部數(shù)據(jù)健爬。
i 表示從這個(gè)數(shù)組下標(biāo)值為 i 的數(shù)據(jù)開始進(jìn)行遍歷。
比如在array數(shù)組中么介,則是從下標(biāo)值為0的數(shù)據(jù) -5 開始娜遵,往后進(jìn)行遍歷,一直到數(shù)組中的最后一個(gè)數(shù)據(jù)壤短。第二個(gè)for循環(huán)(嵌套在第一個(gè)for循環(huán)內(nèi))是用來(lái)比較數(shù)據(jù)值大小——從最后一個(gè)與前一個(gè)開始進(jìn)行循環(huán)设拟,到下標(biāo)值為 i 時(shí)結(jié)束。
j 表示從這個(gè)數(shù)組最大下標(biāo)值為 j 的數(shù)據(jù)開始久脯,讓這個(gè)數(shù)據(jù)與前一個(gè)數(shù)據(jù)比較大小纳胧。
若最后這個(gè)數(shù)據(jù)小,則交換兩個(gè)數(shù)據(jù)的值帘撰,然后下標(biāo)值j-1,進(jìn)行剩余數(shù)據(jù)的比較跑慕;反之,不改變最后一個(gè)數(shù)據(jù)的值摧找,然后讓下標(biāo)值j-1,進(jìn)行剩余數(shù)據(jù)的比較相赁。
比如在array數(shù)組【 -5 50 30】,則從數(shù)據(jù)30與50開始進(jìn)行比較慰于,
因?yàn)?0<50,交換兩者的數(shù)據(jù)值。那么 a[2] 的數(shù)據(jù)值為50唤衫,a[1] 的數(shù)據(jù)值為30婆赠。
接著 j- -,比較30與-5佳励,得到a[1]=30休里,a[0]= - 5。i 和j 控制了從哪一段區(qū)域進(jìn)行比較
在每一次大循環(huán)(第一個(gè)for + 第二個(gè)嵌套的for)內(nèi)赃承,i 控制起始位置妙黍,j 控制結(jié)束位置。
假設(shè)arrays為[0 80 5 15 50 20]瞧剖,
第一趟大循環(huán)內(nèi)拭嫁,所有的比較數(shù)據(jù)為 {0,80抓于,5做粤,15,50捉撮,20} 怕品,
從數(shù)據(jù)0開始進(jìn)行到數(shù)據(jù)20結(jié)束,比較后的結(jié)果為 {0巾遭,5肉康,80闯估,15,20吼和,50}涨薪;
第二趟大循環(huán)內(nèi),所有的比較數(shù)據(jù)為 {5纹安,80尤辱,15,20厢岂,50} 光督,
從數(shù)據(jù)5開始進(jìn)行到數(shù)據(jù)50結(jié)束,比較后的結(jié)果為{5塔粒,15结借,80,20卒茬,50}船老;
第三趟大循環(huán)內(nèi),所有的比較數(shù)據(jù)為 {15圃酵,80柳畔,20,50}郭赐,
從數(shù)據(jù)15開始進(jìn)行到數(shù)據(jù)50結(jié)束薪韩,比較后的結(jié)果為{15,20捌锭,80俘陷,50};
第四趟大循環(huán)內(nèi)观谦,所有的比較數(shù)據(jù)為{20拉盾,80,50}豁状,
從數(shù)據(jù)20開始進(jìn)行到數(shù)據(jù)50結(jié)束捉偏,比較后的結(jié)果為{20,50泻红,80}告私;
到這后所有的比較判斷結(jié)束,輸出時(shí)就是一個(gè)有序的數(shù)列了承桥。總結(jié)
冒泡排序中最關(guān)鍵是要了解 <冒泡排序原理> 和 <for嵌套中的for分別控制了什么內(nèi)容>驻粟。
第三組:蔡永堅(jiān) AugularJS-指令
通過(guò)使用模板,我們可以把model和controller中的數(shù)據(jù)組裝起來(lái)呈現(xiàn)給瀏覽器,還可以通過(guò)數(shù)據(jù)綁定蜀撑,實(shí)時(shí)更新視圖挤巡,讓我們的頁(yè)面變成動(dòng)態(tài)的。
模板中可以使用的東西包括以下四種:
- 指令(directive):ng提供的或者自定義的標(biāo)簽和屬性酷麦,用來(lái)增強(qiáng)HTML表現(xiàn)力矿卑;
- 標(biāo)記(markup):即雙大括號(hào){{}},可將數(shù)據(jù)單向綁定到HTML中沃饶;
- 過(guò)濾器(filter):用來(lái)格式化輸出數(shù)據(jù)母廷;
- 表單控制:用來(lái)增強(qiáng)表單的驗(yàn)證功能满着。
其中濒翻,指令無(wú)疑是使用量最大的奕塑,ng內(nèi)置了很多指令用來(lái)控制模板扭倾,如ng-repeat,ng-class格带,也有很多指令來(lái)幫你完成業(yè)務(wù)邏輯赎懦,如ng-controller,ng-model鞍帝。
指令的幾種使用方式如下:
- 作為標(biāo)簽:<my-dir></my-dir>
- 作為屬性:<span my-dir="exp"></span>
- 作為注釋:
- 作為類名:<span class="my-dir: exp;"></span>
其實(shí)常用的就是作為標(biāo)簽和屬性升酣。
樣式相關(guān)的指令
既然模板就是普通的HTML舷暮,那我首要關(guān)心的就是樣式的控制,元素的定位噩茄、字體下面、背景色等等如何可以靈活控制。下面來(lái)看看常用的樣式控制指令绩聘。
ng-class
ng-class用來(lái)給元素綁定類名沥割,其表達(dá)式的返回值可以是以下三種:
l 類名字符串,可以用空格分割多個(gè)類名君纫,如’class1 class2;
與ng-class相近的芹彬,ng還提供了ng-class-odd蓄髓、ng-class-even兩個(gè)指令,用來(lái)配合ng-repeat分別在奇數(shù)列和偶數(shù)列使用對(duì)應(yīng)的類舒帮。這個(gè)用來(lái)在表格中實(shí)現(xiàn)隔行換色再方便不過(guò)了会喝。ng-style
ng-style用來(lái)綁定元素的css樣式,其表達(dá)式的返回值為一個(gè)js對(duì)象玩郊,鍵為css樣式名肢执,值為該樣式對(duì)應(yīng)的合法取值。ng-show译红,ng-hide
對(duì)于比較常用的元素顯隱控制预茄,ng也做了封裝,ng-show和ng-hide的值為boolean類型的表達(dá)式,當(dāng)值為true時(shí)耻陕,對(duì)應(yīng)的show或hide生效拙徽。框架會(huì)用display:block和display:none來(lái)控制元素的顯隱诗宣。
表單控件功能相關(guān)指令
對(duì)于常用的表單控件功能膘怕,ng也做了封裝,方便靈活控制召庞。
ng-checked控制radio和checkbox的選中狀態(tài)
ng-selected控制下拉框的選中狀態(tài)
ng-disabled控制失效狀態(tài)
ng-multiple控制多選
ng-readonly控制只讀狀態(tài)
以上指令的取值均為boolean類型岛心,當(dāng)值為true時(shí)相關(guān)狀態(tài)生效,道理比較簡(jiǎn)單就不多做解釋篮灼。注意: 上面的這些只是單向綁定忘古,即只是從數(shù)據(jù)到模板,不能反作用于數(shù)據(jù)穿稳。要雙向綁定存皂,還是要使用 ng-model 。
第四組:張?jiān)? Pygame編寫游戲《外星人入侵》
五.重構(gòu)模塊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
此文件中包括了對(duì)鍵盤事件的監(jiān)聽等游戲邏輯處理
完整項(xiàng)目見github:
https://github.com/Frued/Python-Alien
第五組:陳孚楠 JS數(shù)組
JavaScript中創(chuàng)建數(shù)組有兩種方式
(一)使用 Array 構(gòu)造函數(shù):
var arr1 = new Array(); //創(chuàng)建一個(gè)空數(shù)組
var arr2 = new Array(20); // 創(chuàng)建一個(gè)包含20項(xiàng)的數(shù)組
var arr3 = new Array("lily","lucy","Tom"); // 創(chuàng)建一個(gè)包含3個(gè)字符串的數(shù)組
(二)使用數(shù)組字面量表示法:
var arr4 = []; //創(chuàng)建一個(gè)空數(shù)組
var arr5 = [20]; // 創(chuàng)建一個(gè)包含1項(xiàng)的數(shù)組
var arr6 = ["lily","lucy","Tom"]; // 創(chuàng)建一個(gè)包含3個(gè)字符串的數(shù)組
數(shù)組的方法有數(shù)組原型方法逢艘,也有從object對(duì)象繼承來(lái)的方法旦袋,這里我們只介紹數(shù)組的原型方法,數(shù)組原型方法主要有以下這些:
join()
push()和pop()
shift() 和 unshift()
sort()
reverse()
concat()
slice()
splice()
indexOf()和 lastIndexOf()
forEach()
map()
filter()
every()
some()
reduce()和 reduceRight()
我覺(jué)得JS數(shù)組里最重要得是長(zhǎng)度的可擴(kuò)展性它改。