在下面的代碼片段,將展示了兩種生成隨機數或從數組中獲取隨機元素的方法。
生成指定范圍的隨機數:
const getRandoms = (min, max) => {
return Math.round(Math.random() * (max - min) + min);
};
console.log(getRandoms(10, 100));
隨機獲取數組中的一項元素:
const arrayCities = ["北京", "上海", "廣州", "深圳", "天津", "重慶"];
const getRadmonItem = (array) =>
array[Math.floor(Math.random() * array.length)];
console.log("隨機城市:", getRadmonItem(arrayCities));
下面代碼片段展示了使用數字作為密鑰對數字進行加密解密操作,使用異或運算 XOR(^) 來實現,展示一個簡單的加密解密過程。
function Encrypt(secretNumber) {
const _secretNumber = secretNumber;
const encrypted = (encryptNumber) => encryptNumber ^ _secretNumber;
const decrypted = (encryptedContent) => encryptedContent ^ _secretNumber;
return {
encrypted,
decrypted,
};
}
const encryptHelper = new Encrypt(202108);
const encryptNumber = 20210901;
// 加密
const encrypted = encryptHelper.encrypted(encryptNumber);
console.log(encrypted); // 20410793
// 解密
const decrypted = encryptHelper.decrypted(encrypted);
console.log(decrypted); // 20210901
通常定義的一個函數的時候,對于可預期的參數可以使用默認值,而對于必要參數希望給出友好的提示,下面代碼片段展示一個必填參數的定義:
const mandatory = (name) => {
throw new Error(`調用錯誤,必須傳遞參數:${name}`);
};
const printTitle = (title = mandatory("標題")) => {
console.log(`打印文章標題:${title}`);
};
printTitle("JavaScript"); // 打印文章標題:JavaScript
printTitle(); // Error: 調用錯誤,必須傳遞參數:標題
動態創建函數是一種基于字符串動態生成函數的動態機制,通常用于動態表單的規則驗證中,第一個形參是用逗號分隔的實參列表,最后一個形參是函數體的邏輯代碼:
const multiplyFn = new Function(
"num1",
"num2",
"num3",
"return num1*num2*num3"
);
console.log(multiplyFn(1, 2, 3)); // 6
// ES6
const multiply = new Function(
"...numbers",
"return numbers.reduce((acc,current) => acc * current, 1)"
);
console.log(multiply(1, 2, 3)); // 6
簡單的數組清空方式是改變其 length ,如下代碼片段:
const arrayCities = ["北京", "上海", "廣州", "深圳", "天津", "重慶"];
console.log(arrayCities); // [ '北京', '上海', '廣州', '深圳', '天津', '重慶' ]
// 清空
arrayCities.length = 0;
console.log(arrayCities); // []
小數點的處理,是數字常見的操作,主要涉及的方法是 toFixed 和 Math ,下面代碼片段展示常用的方法。
由于 JavaScript 精度原因導致小數點相加的時候與預期有偏差,下面代碼片段展示了四舍五入常見的方法和小數相加的處理:
const pi = 3.14159265359;
console.log(pi.toFixed(3)); // 3.142
const sumFloat = 0.1 + 0.2;
console.log(sumFloat); // 0.30000000000000004
console.log(sumFloat.toFixed(1)); // 0.3
Math 方法中常見用于取整的包括:Math.round() 舍入到最接近的整數, Math.floor() 向下舍入, Math.ceil() 向上舍入。最接近數學意義上四舍五入的方法就只有 toFixed ,如下代碼片段所示:
const pi = 3.14159265359;
console.log(pi.toFixed(0)); // 3
console.log(Math.floor(pi)); // 3
console.log(Math.ceil(pi)); // 4
console.log(Math.round(pi)); // 3
const num2 = 3.5;
console.log(num2.toFixed(0)); // 4
console.log(Math.floor(num2)); // 3
console.log(Math.ceil(num2)); // 4
console.log(Math.round(num2)); // 4
數組項的對象解構在解析 CSV 格式的數據非常實用,請看下面的代碼片段:
const csvAddressDetail = "廣東省,深圳市,南山區,科技園北區科技園大廈";
const arrayAddress = csvAddressDetail.split(",");
const { 0: province, 1: city, 2: district, 3: address } = arrayAddress;
console.log(province, city, district, address); // 廣東省 深圳市 南山區 科技園北區科技園大廈
當然還可以跳過一些索引,如下:
const arrayAddress = csvAddressDetail.split(",");
const { 1: city, 3: address } = arrayAddress;
console.log(city, address); // 深圳市 科技園北區科技園大廈
將值轉換為數字,特別是將字符串轉換為數字,是經常會用到的,有許多方法可以進行轉換,這里展示一些常見的方式:
console.log(+"15"); // 15
console.log(+true); // 1
console.log(+false); // 0
console.log(+null); // 0
console.log(Number("15")); // 15
console.log(parseInt("15", 10)); // 15
console.log(parseFloat("15.42")); // 15.42
下面的代碼片段展示了通過一個完整路徑或者文件名稱獲取文件相應的擴展名稱方法:
const arrayFiles = [
"/attach/pics/logo.png",
"logo.svg",
"template.xlsx",
"template.doc",
];
const getExtName = (fullpath) => {
const root = fullpath.split(/[\\/]/).pop();
const pos = root.lastIndexOf(".");
return root === "" || pos < 1 ? "" : root.slice(pos + 1);
};
const arrayExtNames = arrayFiles.map((item) => getExtName(item));
console.log(arrayExtNames); // [ 'png', 'svg', 'xlsx', 'doc' ]
假設需要定義一個函數,給定一些參數和函數,然后使用這些參數執行這個函數,代碼片段展示一個計算器的功能及擴展運算符的使用,如下代碼:
者 | Minko Gechev
譯者 | 王強
策劃 | 蔡芳芳
轉發鏈接:https://web.dev/commonjs-larger-bundles/
先,通知一個事情:經過考慮,決定創建一個QQ群,方便交流學習,比較方便加入,包括發布一些文件以及支持遠程協助等等,群號:603559164,歡迎大家加入。
這節課,將繼續修改四則運算器,改成讓用戶輸入計算結果,然后程序給出判斷結果是否正確。
上節課的作業
輸入一個分數,根據分數進行判斷,大于等于90分屏幕輸出best,大于等于80分屏幕輸出good,大于等于60分屏幕輸出pass,其他屏幕輸出fail
這是一個經典的if分支語句題目
正確的結果類似如下:
score=input("please input score:")
if score>=90 :
print "best"
elif score>=80 :
print "good"
elif score>=60 :
print "pass"
else :
print "fail"
運行結果如下:
增加注釋行
到目前為止,已經寫了不少程序文件了,add.py,subtract.py,cala.py,score.py
程序文件多了之后,會發現如何快速記起程序的內容和目的,會有點困難,特別是當別人來看你的代碼的時候
為了幫助我們自己和別人,我們需要給程序增加一些描述文字和說明,這就是注釋
注釋的格式是這樣的: #注釋內容
在行首如果是#開頭的表示這一行代碼是注釋,將不會被程序執行,即使#后面跟著的是代碼
我們將最早寫的add.py拿出來,當時刪掉了一行代碼,其實也可以用注釋來完成:
num1=input("num1:")
#print num1
num2=input("num2:")
num3=num1+num2
print num1,"+",num2,"=",num3
這樣第2行代碼就不會執行
我們打開score.py,在最前面增加說明:
這樣,每新做一個程序,就在程序最前面增加注釋說明這個程序的目的是什么,作者是誰,什么時候創建的,方便其他人查看和了解
再次執行程序,會發現提示錯誤如下:
這是因為增加了中文的原因,解決的辦法是指定文件的編碼方式:
在文件第一行增加如下代碼:
#coding=utf-8
再次執行代碼,發現正常了
四則運算測試器修改代碼
接下來,開始改造之前寫的四則運算器程序,改成讓用戶輸入計算結果,然后程序給出判斷結果是否正確。
首先,打開cala.py,另存為cala_test.py
然后在程序開始添加注釋說明:
#coding=utf-8
#四則運算測試器程序
#輸入2個數字,1個操作符,1個計算結果,判斷是否正確
#作者:學哥 時間:2016/12/8
很明顯,需要增加一個輸入,讓用戶輸入計算結果,然后判斷計算結果num3和輸入的結果是否一致,輸出結果
在print 這行之前,增加下列代碼:
result=input("your result:")
if num3==result :
print "right"
else :
print "error"
然后把原來的print這行注釋掉
執行結果如下:
大家在測試程序的時候,除了按照理想或者預期的數據進行輸入之外,還要輸入一些非預期的數據,這樣才能夠完整的測試代碼是否完美
比如上面的程序,如果在預期輸入數字的地方,輸入了一個字符a,或者輸入了帶引號的"a",或者在輸入操作符的地方輸入一個數字
看看會有什么結果,如果發現錯誤,看看應該如何修改,進行限制輸入,如果不知道的話,可以自己去網上搜索,學會自己尋找答案
因為這個并非我們課程的重點,這里就不講解了。
輸入數值改為程序生成隨機數
需要輸入數值和操作符太麻煩了,能不能讓程序自己生成數值和操作符,我們只要輸入結果,看看我們做對了沒有,那多好
那么,就來做100以內的加減乘除測試題目吧
首先,將上面的文件另存為cala_test_rand.py
其次,在注釋的4行下面,將前面3行輸入代碼都刪除掉
num1=input("num1")
operate=input("your operate:")
num2=input("num2:")
然后在程序開始這個地方增加以下代碼:
import random
num1=random.randint(1,99)
num2=random.randint(1,99)
operateint=random.randint(1,4)
if operateint==1:
operate="+"
elif operateint==2:
operate="-"
elif operateint==3:
operate="*"
else:
operate="/"
print num1,operate,num2,"="
完整代碼如下:
結果如下:
注意測試的時候,除法是進行整除,小數位舍棄
代碼說明
import random 引入一個模塊random
random.randint(1,99) 生成一個1到99范圍之內的隨機整數
random.randint(1,4) 生成一個1到4范圍之內的隨機整數
然后根據1到4,將運算符設置為加減乘除
后續代碼不變
關于模塊和函數,后續課程會詳細說明,這里只要知道是什么就可以了
課后作業
1. 輸入數字1-7判斷是星期幾
2. 收集星座具體的日期范圍,考慮一下如何實現輸入一個月和日,輸出所屬星座
往期教程
0001 零基礎的小白能學會編程嗎?
0002 真的嗎,700元的電腦可以學會編程?
0003 十分鐘組裝一臺電腦開始編程
0004 如何編寫人生的第一行代碼helloworld
0005 鍵盤打字如何練成像黑客一樣的飛速
0006 編程入門python語言之加法計算器
0007 編程入門python語言之四則運算器
第一部分前7課小結和課程規劃說明及微信群主招募
因為教程是系列教程,前后關聯性非常強,請大家按照微信公眾號的發布時間先后次序進行閱讀。
微信公眾號里面直接輸入序號可以查看該序號課程,例如輸入0001可以查看【0001 零基礎的小白能學會編程嗎?】
作者簡介
學哥,二十年編程經驗,歷任程序員,資深程序員,技術經理,項目經理,產品經理,系統架構師,IT總監。愛好篆刻,閱讀,美食。
微信號簡介
每天半小時零基礎學編程。大人可以學,小孩也可以學。練打字,用軟件,寫文檔,做網站,做App,編游戲,數據庫,玩硬件,寫程序,3D打印,無人機,機器人。
html,css,javascript,python,php,java,swift,mysql,android,ios,raspberry pi,scratch. 微信公眾號搜索:零基礎學編程。
QQ群簡介
歡迎大家加入QQ群 603559164 零基礎學編程,交流學習,共同進步。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。