主頁 >  其他 > Python四六級考試,快來測驗一下自己的編程水平吧

Python四六級考試,快來測驗一下自己的編程水平吧

2021-02-11 14:29:48 其他

文章目錄

  • 1 選擇題(每題2分,共20分)
  • 2 簡答題(每題3分,共30分)
  • 3 應用題(每題5分,共50分)
    • 3.1 龐大的牛群
    • 3.2 古堡之門
    • 3.3 二維串列轉置
    • 3.4 用print函式畫圓
    • 3.5 約瑟夫環
    • 3.6 撲克牌中的順子
    • 3.7 青蛙上臺階
    • 3.8 24點游戲
    • 3.9 背包問題
    • 3.10 空間直線相交問題
  • 參考答案
    • 1 選擇題
    • 2 簡答題
    • 3 應用題
    • 3.1 龐大的牛群
    • 3.2 古堡之門
    • 3.3 二維串列轉置
    • 3.4 用print函式畫圓
    • 3.5 約瑟夫環
    • 3.6 撲克牌中的順子
    • 3.7 青蛙上臺階
    • 3.8 24點游戲
    • 3.9 背包問題
    • 3.10 空間直線相交問題

不要當真,這只是一套模仿英語四六考試的Python編程能力自測題,完全基于Python基礎語法和標準模塊,僅最后一題,用到了NumPy模塊,參考答案附于文末,讀者可自行核對,如果得分超過60分,相當于英語四級水平;得分超過80分,相當于英語六級水平,

1 選擇題(每題2分,共20分)

1.1 關于C、C++、C#、Python和Java等編程語言的發展史,下面哪一種說法是錯誤的?
  • A C是其中最早古老的
  • B C#是其中最年輕的
  • C C++比Java的歷史更久
  • D Java比Python的歷史更久
1.2 以下四人中誰被稱為“Python之父”?
  • A 詹姆斯·高斯林(James Gosling)
  • B 林納斯·托瓦茲(Linus Torvalds)
  • C 吉多·范羅蘇姆(Guido van Rossum)
  • D 廖雪峰
1.3 串列a=[1,2,3,4,5],print(a[::-2])的輸出為(),
  • A [1,2,3]
  • B [4,5]
  • C [5,3,1]
  • D 顯示例外資訊
1.4 串列a=[1,2,3,4,5],執行a[2:4]=[9]后,print(a)的輸出為(),
  • A [1,2,9,9,5]
  • B [1,2,9,5]
  • C [1,2,[9],5]
  • D 顯示例外資訊
1.5 字典d={'name':'xufive'},下面哪一種寫法是錯誤的?
  • A d[‘name’]
  • B d.name
  • C d.get(‘name’)
  • D d.get(‘age’)
1.6 元組a=(1,2),b=(3,4),下面哪一種寫法是錯誤的?
  • A a[0] = b[1]
  • B a[0] == b[1]
  • C a+b
  • D (*a, *b)
1.7 字串s='xyz',下面哪一種寫法是錯誤的?
  • A list(s)
  • B set(s)
  • C tuple(s)
  • D dict(s)
1.8 應用三元運算式的陳述句中,下面哪一種寫法是錯誤的?
  • A [i if i%2 else i*2 for i in range(5)]
  • B [i if i%2 for i in range(5)]
  • C [i for i in range(5) if i%2]
  • D x = 3 if 3*7==21 else 4
1.9 執行下面的陳述句,回傳結果是(),
[True, 5, 0, False, None, '0', '', 'False'].count(False)
  • A 1
  • B 2
  • C 3
  • D 4
1.10 執行下面的陳述句,回傳結果是(),
''.join(map(lambda s:s*2, 'abc'))
  • A ‘abcabc’
  • B [‘aa’, ‘bb’, ‘cc’]
  • C [‘abc’, ‘abc’]
  • D ‘aabbcc’

2 簡答題(每題3分,共30分)

2.1 計算十六進制數ab和二進制數1100的和,以十進制形式顯示結果,
2.2 生成從A到Z的字串,
2.3 從鍵盤輸入變數名和變數值(以等號分隔),并創建該變數,
2.4 回傳給定字串中出現頻次最高的字符,
2.5 如果一個整數的平方的右側還是這個整數,則該整數被稱為同構數,判斷一個整數是否是同構數,
2.6 串列內,若某個元素的索引號等于這個元素本身,則稱該元素為幸運數,找出給定串列內的幸運數,
2.7 判斷一個數是否為2的整數次冪,
2.8 運行如下代碼,請寫出輸出結果,,
3 and 4 * 5 or 6
2.9 運行如下代碼,請寫出輸出結果,
z = zip('xyz', (1,2,3))
for i in range(2):
    for k, v in z:
        print('%s=%d'%(k,v))
2.10 運行如下代碼,請寫出最后一行輸出,
import threading
import time

def func():
    for i in range(5):
        print(i)
        time.sleep(1)
		
threading.Thread(target=func).start()
time.sleep(3)
print('程式結束')

3 應用題(每題5分,共50分)

3.1 龐大的牛群

假定你現在養了一頭母牛,它每年元旦都生一頭小母牛,每頭小母牛從四周歲開始,每年元旦也生一頭小母牛,不考慮牛的壽命和生育年限,過了n個元旦之后,你總共擁有多少頭牛?

3.2 古堡之門

福爾摩斯到某古堡探險,看到門上寫著一個奇怪的算式:

ABCDE × G = EDCBA

他對華生說:“ABCDE應該代表不同的數字,G也代表某個數字!”
華生:“我猜也是!”
于是,兩人沉默了好久,還是沒有算出合適的結果來,
請利用計算機的優勢,找到破解的答案,

3.3 二維串列轉置

嚴格講,Python的串列并沒有維度的概念,這里說的二維串列是指類似下面這樣的串列,

[ [1, 2, 3], 
  [4, 5, 6], 
  [7, 8, 9] ]

請實作二維串列的轉置(行列互換,首行變首列,尾行變尾列,如下所示),

[ [1, 4, 7], 
  [2, 5, 8], 
  [3, 6, 9] ]

3.4 用print函式畫圓

使用print()函式列印星號,形成一個近似的圓,考慮到在文本顯示模式下字符的寬高不相等,以及字符水平間距和行間距不相等等因素,可以在水平方向重復字符以保持合適的看高比例,

3.5 約瑟夫環

從1開始的n個連續整數順時針組成n個元素的環形佇列,從元素1開始沿順時針方向計數,將第m個元素剔除佇列,緊接著從下一個元素重新開始計數,將第m個元素剔除佇列……直至佇列剩余一個元素,并回傳該元素的值,

3.6 撲克牌中的順子

從撲克牌中隨機抽5張牌,判斷是不是順子,即這5張牌是不是連續的,2~10為數字本身,A為1,J為11,Q為12,K為13,大小王用0表示,可代表任意數字,

3.7 青蛙上臺階

青蛙每次至少可以跳上一層臺階,最多可以跳上兩個臺階,計算青蛙跳上N層臺階總共有多少種方式,

3.8 24點游戲

幾乎每個人都玩過24點游戲,規則也很簡單:任意給出4個數字(視難度不同,一般是10以內或13以內的數字,允許重復),每個數字只能且必須使用1次,利用加減乘除四則運算,使得計算結果為24,例如,4個數字分別為5,5,5,1,則有(5-1/5)*5 = 24,請用代碼解決24點問題,若有解,則列印解,若無解,則列印無解,

3.9 背包問題

在一款英雄對戰游戲中,玩家擁有m件裝備和n位英雄,他可以給每一位英雄分配0件或多件裝備,而不同的英雄擁有不同數目的裝備時將獲得不同的攻擊力,玩家如何分配這m件裝備,可以使得n個英雄獲得的攻擊力的和最大?以玩家擁有5件裝備和3位英雄為例,串列p共有3行6列,對應著3位英雄分別擁有從0到5件裝備時的攻擊力,

3.10 空間直線相交問題

ABCD是歐氏空間中不重合的四個點,判斷過點AB的直線和過點CD的直線是否相交,

參考答案

1 選擇題

BCCBBADBBD

2 簡答題

2.1 計算十六進制數ab和二進制數1100的和,以十進制形式顯示結果,
  • 參考答案1
>>> 0xab + 0b1100
183
  • 參考答案2
>>> int('0xab', base=16) + int('0b1100', base=2)
183
2.2 生成從A到Z的字串,
  • 參考答案
>>> ''.join([chr(ord('A')+i) for i in range(26)])
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
2.3 從鍵盤輸入變數名和變數值(以等號分隔),并創建該變數,
  • 參考答案
>>> cmd = input('請變數名和變數值(以等號分隔):')
請變數名和變數值(以等號分隔):x=5
>>> exec(cmd)
>>> x
5
2.4 回傳給定字串中出現頻次最高的字符,
  • 參考答案
>>> s = 'erwerflkfjsfldkfberwefrasdafsasfdadfasd'
>>> max(set(s), key=s.count)
'f'
2.5 如果一個整數的平方的右側還是這個整數,則該整數被稱為同構數,判斷一個整數是否是同構數,
  • 參考答案
def is_isomo(n):
    return str(n*n)[-len(str(n)):] == str(n)

>>> is_isomo(5)
True

這段代碼中兩次使用str(n),效率一定會打折,追求完美的同學肯定無法接受,下面的代碼使用了海象符號(Py3.8及更高版本支持),可以完美地解決這個問題,

def is_isomo(n):
    return str(n*n)[-len((s:=str(n))):] == s

>>> is_isomo(6)
True
2.6 串列內,若某個元素的索引號等于這個元素本身,則稱該元素為幸運數,找出給定串列內的幸運數,
  • 參考答案

寫成下面這樣,看起來沒有問題,但若存在重復元素,則可能導致結果錯誤,

>>> def find_lucky(arr):
	return list(filter(lambda x:x==arr.index(x), arr))

>>> find_lucky([1, 1, 2, 5])
[2]

這樣寫才是正確的,

>>> def find_lucky(arr):
	return [item[1] for item in filter(lambda x:x[0]==x[1], enumerate(arr))]

>>> find_lucky([1, 1, 2, 5])
[1, 2]
2.7 判斷一個數是否為2的整數次冪,
  • 參考答案

2的整數次冪,寫成二進制一定是高位為1其余為0,利用這個特征,很容易判斷一個數是否是2的整數次冪,

>>> def check_pow(num):
	return num > 0 and num & num-1 == 0

>>> check_pow(256)
True
2.8 運行如下代碼,請寫出輸出結果,,
3 and 4 * 5 or 6
  • 參考答案
20
2.9 運行如下代碼,請寫出輸出結果,
z = zip('xyz', (1,2,3))
for i in range(2):
    for k, v in z:
        print('%s=%d'%(k,v))
  • 參考答案
x=1
y=2
z=3
2.10 運行如下代碼,請寫出最后一行輸出,
import threading
import time

def func():
    for i in range(5):
        print(i)
        time.sleep(1)
		
threading.Thread(target=func).start()
time.sleep(3)
print('程式結束')
  • 參考答案
4

3 應用題

3.1 龐大的牛群

假定你現在養了一頭母牛,它每年元旦都生一頭小母牛,每頭小母牛從四周歲開始,每年元旦也生一頭小母牛,不考慮牛的壽命和生育年限,過了n個元旦之后,你總共擁有多少頭牛?

  • 參考答案1(5分)

從第5個元旦開始,每年新增的小牛數量是4年前的母牛總數,因此過了n個元旦之后牛的數量,等于4年前的牛的數量,加上上一個年的牛的數量,

>>> def cows(n):
	if n < 4:
		return n+1
	return cows(n-1) + cows(n-4)

>>> cows(5)
7
>>> cows(10)
36
>>> cows(20)
907
  • 參考答案2(5分)

遞回雖然簡潔,但未必是最佳選擇,本題的四級參考答案是一個非線性遞回,復雜度為遞回深度的平方,效率很低,其實,同樣的思路,不用遞回實作的話,速度就會快很多,只是代碼沒有遞回那么優雅,

>>> def cows(n):
	if n < 4:
		return n+1
	result = [1,2,3,4]
	for i in range(4, n+1):
		result.append(result[0]+result[-1])
		result = result[1:]
	return result[-1]

>>> cows(5)
7
>>> cows(10)
36
>>> cows(20)
907

3.2 古堡之門

福爾摩斯到某古堡探險,看到門上寫著一個奇怪的算式:

ABCDE × G = EDCBA

他對華生說:“ABCDE應該代表不同的數字,G也代表某個數字!”
華生:“我猜也是!”
于是,兩人沉默了好久,還是沒有算出合適的結果來,
請利用計算機的優勢,找到破解的答案,

  • 參考答案1(3分)

中規中矩的寫法,代碼結構存在改進空間,

>>> def cbble():
	for i in range(10000, 100000):
		a, quotient = divmod(i, 10000)
		b, quotient = divmod(quotient, 1000)
		c, quotient = divmod(quotient, 100)
		d, e = divmod(quotient, 10)
		parts =set([a,b,c,d,e])
		if len(parts) == 5:
			for j in range(1, 10):
				k = 10000*e + 1000*d + 100*c + 10*b +a
				if j not in parts and i*j == k:
					print('%d x %d = %d'%(i, j, k))
					break

				
>>> cbble()
21978 x 4 = 87912
  • 參考答案2(5分)

追求結構的優美甚于追求更高的效率,盡管不是最佳選擇,但對于此問題卻是合適的,

>>> def cbble():
	for i in range(10000, 100000):
		a,b,c,d,e = map(int, str(i))
		parts =set([a,b,c,d,e])
		if len(parts) == 5:
			k = 10000*e + 1000*d + 100*c + 10*b +a
			for j in range(1, 10):
				if j not in parts and i*j == k:
					return('%d x %d = %d'%(i, j, k))
	return '此題無解!'

>>> cbble()
'21978 x 4 = 87912'

3.3 二維串列轉置

嚴格講,Python的串列并沒有維度的概念,這里說的二維串列是指類似下面這樣的串列,

[ [1, 2, 3], 
  [4, 5, 6], 
  [7, 8, 9] ]

請實作二維串列的轉置(行列互換,首行變首列,尾行變尾列,如下所示),

[ [1, 4, 7], 
  [2, 5, 8], 
  [3, 6, 9] ]
  • 參考答案1(3分)

不考慮檢查串列是否滿足轉置的條件(串列每個元素都是長度相等的串列),初級程式員根據第一直覺寫出來的代碼幾乎都是這樣的,

>>> def transpose(arr):
	result = list()
	for j in range(len(arr[0])):
		result.append(list())
		for i in range(len(arr)):
			result[j].append(arr[i][j])
	return result

>>> transpose([[1,2,3], [4,5,6], [7,8,9]])
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
  • 參考答案2(5分)

作為中高級程式員必然掌握使用一顆星(*)和兩顆星(**)的魔法,內置函式用起來更是得心應手,

>>> def transpose(arr):
	return list(zip(*arr))

>>> transpose([[1,2,3], [4,5,6], [7,8,9]])
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

3.4 用print函式畫圓

使用print()函式列印星號,形成一個近似的圓,考慮到在文本顯示模式下字符的寬高不相等,以及字符水平間距和行間距不相等等因素,可以在水平方向重復字符以保持合適的看高比例,

  • 參考答案(5分)

優秀的程式員數學至少要及格才行,畫圓,得先計算出圓上個點的位置,通常要借助于引數方程,比如,令角度變數theta從0°變到360°,對應每個theta,圓上點坐標為:

x = R * cos(theta)
y = R * sin(theta)

理解了這個思路,下面的代碼就很容易看懂了,三角函式來自Python的標準模塊math,該模塊還包括度和弧度互轉等很多數學函式,代碼中的

>>> import math
>>> def print_circle(r, k): # r為半徑,k為寬高比矯正系數
	theta = range(0,360,5)
	x = [round(r*math.cos(math.radians(i))+r) for i in theta]
	y = [round(r*math.sin(math.radians(i))+r) for i in theta]
	dots = set(zip(x,y))
	for i in range(2*r+1):
		for j in range(2*r+1):
			if (i,j) in dots:
				print('*'*k, sep='', end='')
			else:
				print(' '*k, sep='', end='')
		print()

		
>>> print_circle(5, 3)
         ***************         
   ******               ******   
   ***                     ***   
***                        ******
***                           ***
***                           ***
***                           ***
***                           ***
   ***                     ***   
   ******               ******   
         ***************

3.5 約瑟夫環

從1開始的n個連續整數順時針組成n個元素的環形佇列,從元素1開始沿順時針方向計數,將第m個元素剔除佇列,緊接著從下一個元素重新開始計數,將第m個元素剔除佇列……直至佇列剩余一個元素,并回傳該元素的值,

  • 參考答案(5分)
>>> def joseph(n, m):
	queue, start = list(range(1, n+1)), 0
	while len(queue) > 1:
		start = (m+start-1)%len(queue)
		queue.pop(start)
	return queue[0]

3.6 撲克牌中的順子

從撲克牌中隨機抽5張牌,判斷是不是順子,即這5張牌是不是連續的,2~10為數字本身,A為1,J為11,Q為12,K為13,大小王用0表示,可代表任意數字,

  • 參考答案(5分)

本題有兩個環節:

  1. 從撲克牌中隨機抽5張牌
    隨機取牌,可以使用Python的內置模塊random中的sample()方法,該方法可以隨機地從指定串列中提取出多個不同的元素,
  2. 判斷是不是順子
    將5張牌換成對應數字,剔除0后排序,若是順子的話,前后元素之差均為1,若不是1,同時超過1的總和大于0的個數,則不是順子,否則為順子,
>>> import random
>>> import numpy as np
>>> def get_five():
	poker = list(range(1,14))*4 + [0,0] # 生成54張撲克牌
	return random.sample(poker, 5)

>>> def is_straight(five):
	no_zero = list(filter(lambda x:x>0, five)) # 剔除0
	if len(no_zero) > len(set(no_zero)): # 如有重復
		return False # 則不是順子
	no_zero.sort() # 非零元素排序
	no_zero = np.array(no_zero) # 轉為numpy陣列
	diff = np.diff(no_zero) # diff為相鄰元素的差組成的陣列
	if np.sum(diff - 1) > 5-no_zero.size: # 若diff各元素減1后的和大于0的個數
		return False # 則不是順子
	else:
		return True
	
>>> def test(n): # 測驗函式
	for i in range(n):
		five = get_five()
		if is_straight(five):
			print(five)
			
>>> test(100) # 測驗100次
[12, 10, 11, 0, 8]
[5, 1, 0, 3, 2]
[10, 6, 0, 7, 9]

3.7 青蛙上臺階

青蛙每次至少可以跳上一層臺階,最多可以跳上兩個臺階,計算青蛙跳上N層臺階總共有多少種方式,

  • 參考答案1(5分)

跳一層只有一種方法,跳兩層則有兩種方法,要跳到K層,可以先跳到K-1層后再跳一次邁上一層,也可以先跳到K-2層后再一步跳上兩層,顯然,跳到K層的方法數量等于跳到K-1層的方法數量加上跳到K-2層的方法數量,基于這個推理,很容易寫出遞回代碼,

>>> def climb(n):
	if n == 1:
		return 1
	elif n == 2:
		return 2
	else:
		return climb(n-1) + climb(n-2)

	
>>> climb(10)
89
  • 參考答案2(5分)

遞回方法雖然簡潔,但會受遞回深度限制,無法計算超過遞回深度的數值,其實,不使用遞回,代碼寫起來也很簡答,

>>> def climb(n):
	if n == 1:
		return 1
	elif n == 2:
		return 2
	c1, c2 = 1, 2
	for i in range(2,n):
		c1, c2 = c2, c1+c2
	return c2

>>> climb(10)
89

3.8 24點游戲

幾乎每個人都玩過24點游戲,規則也很簡單:任意給出4個數字(視難度不同,一般是10以內或13以內的數字,允許重復),每個數字只能且必須使用1次,利用加減乘除四則運算,使得計算結果為24,例如,4個數字分別為5,5,5,1,則有(5-1/5)*5 = 24,請用代碼解決24點問題,若有解,則列印解,若無解,則列印無解,

  • 參考答案(5分)

不考慮計算順序的話,4個數字使用4種運算子連接的話,共有443424=1536種組合,若考慮使用括號改變計算順序,則前述每一種組合又可分為11種情況,遍歷全部153611=16896種組合,即可解決問題,另外,書寫代碼時如果使用內置的排列函式(permutations)和笛卡爾積函式(product),會使代碼更簡練,

>>> from itertools import permutations, product
>>> def game24(n1,n2,n3,n4):
		for a,b,c,d in permutations((n1,n2,n3,n4),4):
			for o1,o2,o3 in product(['+','-','*','/'], repeat=3): # 笛卡爾積的另一種寫法
				cases = list()
				cases.append('%d%s%d%s%d%s%d'%(a,o1,b,o2,c,o3,d))
				cases.append('(%d%s%d)%s%d%s%d'%(a,o1,b,o2,c,o3,d))
				cases.append('%d%s%d%s(%d%s%d)'%(a,o1,b,o2,c,o3,d))
				cases.append('%d%s(%d%s%d)%s%d'%(a,o1,b,o2,c,o3,d))
				cases.append('(%d%s%d)%s(%d%s%d)'%(a,o1,b,o2,c,o3,d))
				cases.append('(%d%s%d%s%d)%s%d'%(a,o1,b,o2,c,o3,d))
				cases.append('((%d%s%d)%s%d)%s%d'%(a,o1,b,o2,c,o3,d))
				cases.append('(%d%s(%d%s%d))%s%d'%(a,o1,b,o2,c,o3,d))
				cases.append('%d%s(%d%s%d%s%d)'%(a,o1,b,o2,c,o3,d))
				cases.append('%d%s((%d%s%d)%s%d)'%(a,o1,b,o2,c,o3,d))
				cases.append('%d%s(%d%s(%d%s%d))'%(a,o1,b,o2,c,o3,d))
				for expression in cases:
					try: # 捕獲運算式中分母為0的例外
						if eval(expression) == 24:
							print('答案:%s = 24'%expression)
							return
					except:
						pass
		print('無解!')

	
>>> game24(5,5,5,1)
答案:5*(5-1/5) = 24
>>> game24(1,3,4,6)
答案:6/(1-3/4) = 24
>>> game24(10,10,4,4)
答案:(10*10-4)/4 = 24
>>> game24(7,7,3,3)
答案:7*(3/7+3) = 24
>>> game24(1,5,7,10)
答案:(1+7/5)*10 = 24
>>> game24(15,25,37,80)
無解!

3.9 背包問題

在一款英雄對戰游戲中,玩家擁有m件裝備和n位英雄,他可以給每一位英雄分配0件或多件裝備,而不同的英雄擁有不同數目的裝備時將獲得不同的攻擊力,玩家如何分配這m件裝備,可以使得n個英雄獲得的攻擊力的和最大?以玩家擁有5件裝備和3位英雄為例,串列p共有3行6列,對應著3位英雄分別擁有從0到5件裝備時的攻擊力,

p = [
	[0, 1, 3, 5, 7, 9],
	[0, 1, 1, 3, 3, 7],
	[0, 3, 4, 5, 6, 7]
]
  • 參考答案(5分)

這是一個背包問題的變形,即便不熟悉背包問題,也不難找到解題思路:

  1. 找出所有可能的裝備分配方案
  2. 計算每一個方案的攻擊值
  3. 選擇攻擊值最大的分配方案

找出將m件裝備分配給n位英雄的所有方案是解決問題的核心,

>>> def bag(m, n, result, series=list()):
	if n == 1:
		for i in range(m+1):
			result.append(series+[i])
			#print(result[-1])
	else:
		for i in range(m+1):
			bag(m-i, n-1, result, series+[i])

			
>>> result = list()
>>> bag(5, 3, result) # 將5件裝備分配給3位英雄,共有56種分配方案
>>> p = [
	[0,1,3,5,7,9],
	[0,1,1,3,3,7],
	[0,3,4,5,6,7]
]
>>> v = list()
>>> for item in result: # 計算每一種方案的攻擊值
        v.append(p[0][item[0]] + p[1][item[1]] + p[2][item[2]])

>>> max(v) # 最大攻擊值是10
10
>>> result[v.index(max(v))] # 最佳分配方案
[4, 0, 1] # 第1位英雄持有4件裝備,第2位英雄沒有裝備,第3位英雄持有1件裝備,

3.10 空間直線相交問題

ABCD是歐氏空間中不重合的四個點,判斷過點AB的直線和過點CD的直線是否相交,

  • 參考答案(5分)

假如使用空間決議幾何的方式,這個問題對于程式員來說是一個難題,不過,如果你熟悉NumPy,理解點積(np.dot)和叉積(np.cross)的話,解決這個問題就變得非常容易了,

  1. 計算向量ab和向量cd的叉積,得到一個新的向量orth
  2. 若向量orth的元素全部為零,則兩直線平行,否則向量orth必定同時垂直于向量ab和向量cd
  3. 直線相交,則向量ac和向量orth的點積為零,否則直線必定不相交
>>> import numpy as np
>>> def is_orthogonal(a, b, c, d):
	ab = np.array(a) - np.array(b)
	cd = np.array(c) - np.array(d)
	ac = np.array(a) - np.array(c)
	orth = np.cross(ab,cd)
	return orth.any() and np.dot(orth, ac) == 0

>>> a,b,c,d = (0,0,0),(1,0,0),(0,0,0),(0,1,0)
>>> is_orthogonal(a, b, c, d)
True
>>> a,b,c,d = (0,0,0),(1,0,0),(0,0,1),(0,1,1)
>>> is_orthogonal(a, b, c, d)
False

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/258818.html

標籤:其他

上一篇:CCF 201312-1 出現次數最多的數 C語言代碼(100分)

下一篇:“春節檔”游戲運營核心方法論

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more