# 前言
現在面試測試崗位,一般會要求熟悉一門語言(python/java),為了考驗求職者的基本功,一般會出2個筆試題,這些題目一般不難,主要考察基本功。
要是給你一臺電腦,在編輯器里面邊寫邊調試,沒多大難度。主要是給你一張紙和筆,讓你現場寫出來,那就沒那么容易了。
(本篇代碼都是基于python3.6)
<br />
<details>
<summary>1. 統計</summary>
> 問題1:統計在一個隊列中的數字,有多少個正數,多少個負數,如\[1, 3, 5, 7, 0, -1, -9, -4, -5, 8\]
#### 方法一
~~~
# coding:utf-8
a = [1, 3, 5, 7, 0, -1, -9, -4, -5, 8]
# 用列表生成式,生成新的列表
b = [i for i in a if i > 0]
print("大于0的個數:%s" % len(b))
c = [i for i in a if i < 0]
print("小于0的個數:%s" % len(c))
~~~
#### 方法二
~~~
# coding:utf-8
a = [1, 3, 5, 7, 0, -1, -9, -4, -5, 8]
# 用傳統的判斷思維,累加
m = 0
n = 0
for i in a:
if i > 0:
m += 1
elif i < 0:
n += 1
else:
pass
print("大于0的個數:%s" % m)
print("小于0的個數:%s" % n)
~~~
</details>
<br />
<details>
<summary>2. 字符串切片</summary>
> 問題1:字符串 "axbyczdj",如果得到結果“abcd”
#### 方法一
~~~
# 字符串切片
a = "axbyczdj"
print(a[::2])
~~~
#### 方法二
~~~
# 傳統思維
a = "axbyczdj"
c = []
for i in range(len(a)):
if i % 2 == 0:
c.append(a[i])
print("".join(c))
~~~
</details>
<br />
<details>
<summary>3. 字符串切割</summary>
> 問題:已知一個字符串為“hello\_world\_yoyo”, 如何得到一個隊列 \["hello","world","yoyo"\]
~~~
a = "hello_world_yoyo"
b = a.split("_")
print(b)
~~~
</details>
<br />
<details>
<summary>4. 格式化輸出</summary>
> 問題1:已知一個數字為1,如何輸出“0001”
~~~
a = 1
print("%04d" % a)
~~~
</details>
<br />
<details>
<summary>5. 隊列</summary>
> 問題1:已知一個隊列,如: [1, 3, 5, 7], 如何把第一個數字,放到第三個位置,得到:[3, 5, 1, 7]
~~~
a = [1, 3, 5, 7]
# insert插入數據
a.insert(3, a[0])
print(a[1:])
~~~
</details>
<br />
<details>
<summary>6. 交換</summary>
> 問題1:已知 a = 9, b = 8,如何交換a和b的值,得到a的值為8,b的值為9
#### 方法1
~~~
a = 8
b = 9
a, b = b, a
print(a)
print(b)
~~~
#### 方法2
~~~
a = 8
b = 9
# 用中間變量c
c = a
a = b
b = c
print(a)
print(b)
~~~
</details>
<br />
<details>
<summary>7. 水仙花</summary>
> 問題1:打印出100-999所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等于該數本身。例如:153是一個"水仙花數",因為153=1的三次方+5的三次方+3的三次方。
<br />
方法一
~~~
sxh = []
for i in range(100, 1000):
s = 0
m = list(str(i))
for j in m:
s += int(j)**len(m)
if i == s:
print(i)
sxh.append(i)
print("100-999的水仙花數:%s" % sxh)
~~~
<br />
方法二
```
sxh = []
for i in range(100,1000):
s = str(i)
if int(s[0])**3+int(s[1])**3+int(s[2])**3 == i:
sxh.append(i)
print(sxh)
```
</details>
<br />
<details>
<summary>8. 完全數</summary>
> 問題1:如果一個數恰好等于它的因子之和,則稱該數為“完全數”,又稱完美數或完備數。 例如:第一個完全數是6,它有約數1、2、3、6,除去它本身6外,其余3個數相加,
> 1+2+3=6。第二個完全數是28,它有約數1、2、4、7、14、28,除去它本身28外,其余5個數相加,1+2+4+7+14=28。
> 那么問題來了,求1000以內的完全數有哪些?
~~~
a = []
for i in range(1, 1000):
s = 0
for j in range(1, i):
if i % j == 0 and j < i:
s += j
if s == i:
print(i)
a.append(i)
print("1000以內完全數:%s" % a)
~~~
</details>
<br />
<details>
<summary>9. 冒泡排序</summary>
> 冒泡排序(Bubble Sort)也是一種簡單直觀的排序算法。它重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個算法的名字由來是因為越小的元素會經由交換慢慢"浮"到數列的頂端。
問題1:用python寫個冒泡排序
* 方法一:
~~~
a = [1, 3, 10, 9, 21, 35, 4, 6]
s = range(1, len(a))[::-1]
print(list(s)) # 交換次數
for i in s:
for j in range(i):
if a[j] > a[j + 1]:
a[j], a[j + 1] = a[j + 1], a[j]
print("第 %s 輪交換后數據:%s" % (len(s)-i+1, a))
print(a)
~~~
* 方法二
```
def bubbleSort(arr):
n = len(arr)
# 遍歷所有數組元素
for i in range(n):
# 最后一個i元素已經存在
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
arr = [1, 3, 10, 9, 21, 35, 4, 6]
bubbleSort(arr)
print("排序后的數組:")
for i in range(len(arr)):
print("%d" % arr[i])
```
</details>
<br />
<details>
<summary>10. sort排序</summary>
> 問題1:已知一個隊列\[1, 3, 6, 9, 7, 3, 4, 6\]
* 按從小到大排序
* 按從大大小排序
* 去除重復數字
~~~
a = [1, 3, 6, 9, 7, 3, 4, 6]
# 1.sort排序,正序
a.sort()
print(a)
# 2.sort倒敘
a.sort(reverse=True)
print(a)
# 3.去重
b = list(set(a))
print(b)
~~~
</details>
<br />
<details>
<summary>11. 計算n的階乘</summary>
> 問題1:計算n!,例如n=3(計算3*2*1=6), 求10!
#### 方法1:可以用python里面的reduce函數,reduce() 函數會對參數序列中元素進行累積。
函數將一個數據集合(鏈表,元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(有兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最后得到一個結果。
~~~
from functools import reduce
# 方法1:推薦!
a = 10
b = reduce(lambda x, y: x*y, range(1, a+1))
print(b)
~~~
如果不想用lamdba函數,可以定義一個函數
~~~
from functools import reduce
def chengfa(x, y):
return x*y
a = 10
b = reduce(chengfa, range(1, a+1))
print(b)
~~~
#### 方法2:自己寫個遞歸函數
~~~
def digui(n):
if n == 1:
return 1
else:
return n*digui(n-1)
a = 10
print(digui(a))
~~~
#### 方法3:用for循環(不推薦!)
~~~
a = 10
s = 1
for i in range(1, a+1):
s = s*i
print(s)
~~~
</details>
<br />
<details>
<summary>12. 斐波那契數列</summary>
<br />
> 問題1:已知一個數列:1、1、2、3、5、8、13.....的規律為從3開始的每一項都等于其前兩項的和,這是斐波那契數列。求滿足規律的100以內的所有數據
~~~
a = 0
b = 1
while b < 100:
print(b, end=",")
a, b = b, a+b
~~~
</details>
<br />
<details>
<summary>13. 冪的遞歸</summary>
<br />
計算x的n次方,如:3的4次方 為3\*3\*3\*3=81
~~~
def mi(x, n):
'''計算x 的n 次方'''
if n == 0:
return 1
else:
return x*mi(x, n-1)
x = 3
num = 4
print(mi(x, num))
~~~
</details>
<br />
<details>
<summary>14. 漢諾塔問題(一般不會考)</summary>
<br />
漢諾塔:漢諾塔(又稱河內塔)問題是源于印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤

當只有一個盤子的時候,只需要從將A塔上的一個盤子移到C塔上。
當A塔上有兩個盤子是,先將A塔上的1號盤子(編號從上到下)移動到B塔上,再將A塔上的2號盤子移動的C塔上,最后將B塔上的小盤子移動到C塔上。
當A塔上有3個盤子時,先將A塔上編號1至2的盤子(共2個)移動到B塔上(需借助C塔),然后將A塔上的3號最大的盤子移動到C塔,最后將B塔上的兩個盤子借助A塔移動到C塔上。
當A塔上有n個盤子是,先將A塔上編號1至n-1的盤子(共n-1個)移動到B塔上(借助C塔),然后將A塔上最大的n號盤子移動到C塔上,最后將B塔上的n-1個盤子借助A塔移動到C塔上。
綜上所述,除了只有一個盤子時不需要借助其他塔外,其余情況均一樣(只是事件的復雜程度不一樣)。
~~~
def hanoi(n, a, b, c):
'''漢諾塔問題'''
if n == 1:
print(a, '-->', c)
else:
hanoi(n - 1, a, c, b)
print(a, '-->', c)
hanoi(n - 1, b, a, c)
hanoi(5, 'A', 'B', 'C')
~~~
一般漢諾塔問題不會經常考,前面幾個考的比較頻繁
</details>
<br />
<details>
<summary>15. 對列表list去重</summary>
<br />
方法一:直接的方法
```
old_list = [2, 3, 4, 5, 1, 2, 3]
new_list = []
for i in old_list:
if i not in new_list:
new_list.append(i)
print(new_list) # [2, 3, 4, 5, 1]
```
</details>
<br />
<details>
<summary>16. 如何判斷三角形的類型</summary>
```
a = int(input("請輸入第一條邊:"))
b = int(input("請輸入第二條邊:"))
c = int(input("請輸入第三條邊:"))
if (a+b>c) and (a+c>b) and (b+c>a):
if a==b==c:
print("等邊三角形")
elif (a==b or b==c or a==c):
print("等腰三角形")
elif (a*a + b*b == c*c) or (a*a + c*c == b*b) or (b*b + c*c == a*a):
print("直角三角形")
else:
print("不規則三角形")
else:
print("不是三角形")
```
</details>
<br />
- Linux
- Linux 文件權限概念
- 重點總結
- Linux 文件與目錄管理
- 2.1 文件與目錄管理
- 2.2 文件內容查閱
- 文件與文件系統的壓縮,打包與備份
- 3.1 Linux 系統常見的壓縮指令
- 3.2 打包指令: tar
- vi/vim 程序編輯器
- 4.1 vi 的使用
- 4.2 vim編輯器刪除一行或者多行內容
- 進程管理
- 5.1 常用命令使用技巧
- 5.2 進程管理
- 系統服務 (daemons)
- 6.1 通過 systemctl 管理服務
- Linux 系統目錄結構
- Linux yum命令
- linux系統查看、修改、更新系統時間(自動同步網絡時間)
- top linux下的任務管理器
- Linux基本配置
- CentOS7開啟防火墻
- CentOS 使用yum安裝 pip
- strace 命令
- Linux下設置固定IP地址
- 查看Linux磁盤及內存占用情況
- Mysql
- 關系數據庫概述
- 數據庫技術
- 數據庫基礎語句
- 查詢語句(--重點--)
- 約束
- 嵌套查詢(子查詢)
- 表emp
- MySQL數據庫練習
- 01.MySQL數據庫練習數據
- 02.MySQL數據庫練習題目
- 03.MySQL數據庫練習-答案
- Mysql遠程連接數據庫
- Python
- python基礎
- Python3中字符串、列表、數組的轉換方法
- python字符串
- python安裝、pip基本用法、變量、輸入輸出、流程控制、循環
- 運算符及優先級、數據類型及常用操作、深淺拷貝
- 虛擬環境(virtualenv)
- 網絡編程
- TCP/IP簡介
- TCP編程
- UDP編程
- 進程和線程
- 訪問數據庫
- 使用SQLite
- 使用MySQL
- Web開發
- HTML簡介
- Python之日志處理(logging模塊)
- 函數式編程
- 高階函數
- python報錯解決
- 啟動Python時報“ImportError: No module named site”錯誤
- python實例
- 01- 用python解決數學題
- 02- 冒泡排序
- 03- 郵件發送(smtplib)
- Django
- 01 Web應用
- Django3.2 教程
- Django簡介
- Django環境安裝
- 第一個Django應用
- Part 1:請求與響應
- Part 2:模型與后臺
- Part 3:視圖和模板
- Part 4:表單和類視圖
- Part 5:測試
- Part 6:靜態文件
- Part 7:自定義admin
- 第一章:模型層
- 實戰一:基于Django3.2可重用登錄與注冊系統
- 1. 搭建項目環境
- 2. 設計數據模型
- 3. admin后臺
- 4. url路由和視圖
- 5. 前端頁面設計
- 6. 登錄視圖
- 7. Django表單
- 8. 圖片驗證碼
- 9. session會話
- 10. 注冊視圖
- 實戰二:Django3.2之CMDB資產管理系統
- 1.項目需求分析
- 2.模型設計
- 3.數據收集客戶端
- 4.收集Windows數據
- 5.Linux下收集數據
- 6.新資產待審批區
- 7.審批新資產
- django 快速搭建blog
- imooc-Django全棧項目開發實戰
- redis
- 1.1 Redis簡介
- 1.2 安裝
- 1.3 配置
- 1.4 服務端和客戶端命令
- 1.5 Redis命令
- 1.5.1 Redis命令
- 1.5.2 鍵(Key)
- 1.5.3 字符串(string)
- 1.5.4 哈希(Hash)
- 1.5.5 列表(list)
- 1.5.6 集合(set)
- 1.5.7 有序集合(sorted set)
- Windows
- Win10安裝Ubuntu子系統
- win10遠程桌面身份驗證錯誤,要求的函數不受支持
- hm軟件測試
- 02 linux基本命令
- Linux終端命令格式
- Linux基本命令(一)
- Linux基本命令(二)
- 02 數據庫
- 數據庫簡介
- 基本概念
- Navicat使用
- SQL語言
- 高級
- 03 深入了解軟件測試
- day01
- 04 python基礎
- 語言基礎
- 程序中的變量
- 程序的輸出
- 程序中的運算符
- 數據類型基礎
- 數據序列
- 數據類型分類
- 字符串
- 列表
- 元組
- 字典
- 列表與元組的區別詳解
- 函數
- 案例綜合應用
- 列表推導式
- 名片管理系統
- 文件操作
- 面向對象基礎(一)
- 面向對象基礎(二)
- 異常、模塊
- 05 web自動化測試
- Day01
- Day02
- Day03
- Day04
- Day05
- Day06
- Day07
- Day08
- 06 接口自動化測試
- 軟件測試面試大全2020
- 第一章 測試理論
- 軟件測試面試
- 一、軟件基礎知識
- 二、網絡基礎知識
- 三、數據庫
- SQL學生表 — 1
- SQL學生表 — 2
- SQL查詢 — 3
- SQL經典面試題 — 4
- 四、linux
- a. linux常用命令
- 五、自動化測試
- 自動化測試
- python 筆試題
- selenium面試題
- 如何判斷一個頁面上元素是否存在?
- 如何提高腳本的穩定性?
- 如何定位動態元素?
- 如何通過子元素定位父元素?
- 如果截取某一個元素的圖片,不要截取全部圖片
- 平常遇到過哪些問題?如何解決的
- 一個元素明明定位到了,點擊無效(也沒報錯),如果解決?
- selenium中隱藏元素如何定位?(hidden、display: none)
- 六、接口測試
- 接口測試常規面試題
- 接口自動化面試題
- json和字典dict的區別?
- 測試的數據你放在哪?
- 什么是數據驅動,如何參數化?
- 下個接口請求參數依賴上個接口的返回數據
- 依賴于登錄的接口如何處理?
- 依賴第三方的接口如何處理
- 不可逆的操作,如何處理,比如刪除一個訂單這種接口如何測試
- 接口產生的垃圾數據如何清理
- 一個訂單的幾種狀態如何全部測到,如:未處理,處理中,處理失敗,處理成功
- python如何連接數據庫操作?
- 七、App測試
- 什么是activity?
- Activity生命周期?
- Android四大組件
- app測試和web測試有什么區別?
- android和ios測試區別?
- app出現ANR,是什么原因導致的?
- App出現crash原因有哪些?
- app對于不穩定偶然出現anr和crash時候你是怎么處理的?
- app的日志如何抓取?
- logcat查看日志步驟
- 你平常會看日志嗎, 一般會出現哪些異常
- 抓包工具
- fiddler
- Wireshark
- 安全/滲透測試
- 安全性測試都包含哪些內容?
- 開放性思維題
- 面試題
- 字節測試面試
- 一、計算機網絡
- 二、操作系統
- 三、數據庫
- 四、數據結構與算法
- 五、Python
- 六、Linux
- 七、測試用例
- 八、智力/場景題
- 九、開放性問題
- python3_收集100+練習題(面試題)
- python3_100道題目答案
- 接口測試
- 接口測試實例_01
- python+requests接口自動化測試框架實例詳解
- 性能測試
- 性能測試流程
- 性能測試面試題
- 如何編寫性能測試場景用例
- 性能測試:TPS和QPS的區別
- jmeter
- jmeter安裝配置教程
- Jmeter性能測試 入門
- PyCharm
- 快捷工具
- 1-MeterSphere
- 一、安裝和升級
- 2- MobaXterm 教程
- 3-fiddler抓包
- 4-Xshell
- Xshell的安裝和使用
- Xshell遠程連接失敗怎么解決
- 5-Vmware
- Vmware提示以獨占方式鎖定此配置文件失敗
- Windows10徹底卸載VMWare虛擬機步驟
- VM ware無法關機,虛擬機繁忙
- VMware虛擬機下載與安裝
- 解決VM 與 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 后,可以運行 VM 的方法
- VMware虛擬機鏡像克隆與導入
- 6-WPS
- 1.WPS文檔里的批注怎么刪除
- 2.wps表格中設置圖表的坐標
- 3. wps快速繪制數學交集圖
- 7-MongoDB
- Win10安裝配置MongoDB
- Navicat 15.x for MongoDB安裝破解教程
- Apache
- apache層的賬戶權限控制,以及apache黑名單白名單過濾功能
- HTTP / HTTPS協議
- HTTP協議詳解
- 代理
- 狀態碼詳解
- HTTPS詳解
- Selenium3+python3
- (A) selenium
- selenium自動化環境搭建(Windows10)
- 火狐firebug和firepath插件安裝方法(最新)
- 元素定位工具和方法
- Selenium3+python3自動化
- 新手學習selenium路線圖---學前篇
- 1-操作瀏覽器基本方法
- 2-八種元素定位方法
- 3-CSS定位語法
- 4-登錄案例
- 5-定位一組元素find_elements
- 6-操作元素(鍵盤和鼠標事件)
- 7-多窗口、句柄(handle)
- 8-iframe
- 9-select下拉框
- 10-alert\confirm\prompt
- 11-JS處理滾動條
- 12-單選框和復選框(radiobox、checkbox)
- 13-js處理日歷控件(修改readonly屬性)
- 14-js處理內嵌div滾動條
- 15-table定位
- 16-js處理多窗口
- 17-文件上傳(send_keys)
- 18-獲取百度輸入聯想詞
- 19-處理瀏覽器彈窗
- 20-獲取元素屬性
- 21-判斷元素存在
- 22-爬頁面源碼(page_source)
- 23-顯式等待(WebDriverWait)
- 24-關于面試的題
- 25-cookie相關操作
- 26-判斷元素(expected_conditions)
- 27-判斷title(title_is)
- 28-元素定位參數化(find_element)
- 29-18種定位方法(find_elements)
- 30- js解決click失效問題
- 31- 判斷彈出框存在(alert_is_present)
- 32- 登錄方法(參數化)
- 33- 判斷文本(text_to_be_present_in_element)
- 34- unittest簡介
- 35- unittest執行順序
- 36- unittest之裝飾器(@classmethod)
- 37- unittest之斷言(assert)
- 38- 捕獲異常(NoSuchElementException)
- 39- 讀取Excel數據(xlrd)
- 40- 數據驅動(ddt)
- 41- 異常后截圖(screenshot)
- 42- jenkins持續集成環境搭建
- 43- Pycharm上python和unittest兩種運行方式
- 44- 定位的坑:class屬性有空格
- 45- 只截某個元素的圖
- 46- unittest多線程執行用例
- 47- unittest多線程生成報告(BeautifulReport)
- 48- 多線程啟動多個不同瀏覽器
- (B) python3+selenium3實現web UI功能自動化測試框架
- (C) selenium3常見報錯處理
- 書籍
- (D)Selenium3自動化測試實戰--基于Python語
- 第4章 WebDriver API
- 4.1 從定位元素開始
- 4.2 控制瀏覽器
- 4.3 WebDriver 中的常用方法
- 4.4 鼠標操作
- 4.5 鍵盤操作
- 4.6 獲得驗證信息
- 4.7 設置元素等待
- 4.8 定位一組元素
- 4.9 多表單切換
- 4.10 多窗口切換
- 4.11 警告框處理
- 4.12 下拉框處理
- 4.13 上傳文件
- 4.14 下載文件
- 4.15 操作cookie
- 4.16 調用JavaScript
- 4.17 處理HTML5視頻播放
- 4.18 滑動解鎖
- 4.19 窗口截圖
- 第5章 自動化測試模型
- 5.3 模塊化與參數化
- 5.4 讀取數據文件
- 第6章 unittest單元測試框架
- 6.1 認識unittest