精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用 200 行 Python 代碼掌握基本音樂理論

開發(fā) 后端
本文作者是一位多年自學成才的吉他手,但對西方樂理一無所知,因此決定編寫一些代碼來搞懂它。本文用了大約200行Python代碼來幫助我們理解西方音樂理論的基礎知識。

[[395799]]

本文轉載自微信公眾號「Python中文社區(qū)」,作者Manohar 。轉載本文請聯系Python中文社區(qū)公眾號。

本文作者是一位多年自學成才的吉他手,但對西方樂理一無所知,因此決定編寫一些代碼來搞懂它。

本文用了大約200行Python代碼來幫助我們理解西方音樂理論的基礎知識。

我們將首先查看西方音樂理論中的音符,使用它們來導出給定鍵中的半音階,然后將其與音程公式結合起來以導出常見的音階和和弦。

最后,我們將研究模式,這些模式是從通用音階衍生出來的整個音階集合,可以用來喚起比主要音階和次要音階所提供的悲喜二分法更微妙的情緒和氣氛。

十二音符

西方音樂的音樂字母由字母A到G組成,它們代表不同的音高。

我們可以使用以下Python列表來表示音樂字母:

  1. alphabet = ['A''B''C''D''E''F''G'

但是,這些音符的頻率分布不均。為了使音高之間的間距更均勻,我們有以下十二個音符:

  1. notes_basic = [ 
  2.     ['A'], 
  3.     ['A#''Bb'], 
  4.     ['B'], 
  5.     ['C'], 
  6.     ['C#''Db'], 
  7.     ['D'], 
  8.     ['D#''Eb'], 
  9.     ['E'], 
  10.     ['F'], 
  11.     ['F#''Gb'], 
  12.     ['G'], 
  13.     ['G#''Ab'], 

這里有四點要注意:首先,每個音符相距半步或半音,其次,它的表示方式是通過可選的尾隨符號(稱為偶然符號)來表示半步升高(尖銳, ?)或將基調降低半個音階(平坦,?),第三,上述音符只是循環(huán)并重新開始,但是音階較高。

最后,您會注意到,其中一些音符由包含多個名稱的列表表示:這些是諧音等效詞,這是一種奇特的說法,即同一音符可以具有不同的“拼寫”。因此,例如,音符在A上方半步是A?,但也可以認為是B下方半步的音符,因此可以稱為B?。由于歷史原因,音符 B/C 和 E/F 之間沒有尖銳或平坦的部分。

我們需要這些等效詞的重要原因是,當我們開始推導通用音階(大,小和模式)時,連續(xù)音符必須以連續(xù)字母開頭。具有不同字母的諧音等效詞使我們能夠正確得出這些音階。

實際上,對于某些鍵,上述諧音音符是不夠的。為了滿足“連續(xù)字母的不同字母規(guī)則”,我們最終不得不使用雙尖銳和雙扁平方式來提高或降低音符整步。這些音階通常具有不需要這些雙重偶然性的等效詞,但是為了完整起見,我們可以通過重寫我們的注釋來包括所有可能的諧音等效詞,如下所示:

  1. notes = [ 
  2.     ['B#',  'C',  'Dbb'], 
  3.     ['B##''C#''Db'], 
  4.     ['C##''D',  'Ebb'], 
  5.     ['D#',  'Eb''Fbb'], 
  6.     ['D##''E',  'Fb'], 
  7.     ['E#',  'F',  'Gbb'], 
  8.     ['E##''F#''Gb'], 
  9.     ['F##''G',  'Abb'], 
  10.     ['G#',  'Ab'], 
  11.     ['G##''A',  'Bbb'], 
  12.     ['A#',  'Bb''Cbb'], 
  13.     ['A##''B',  'Cb'], 

半音音階

半音階是最簡單的音階,它僅由給定音調(音階中的主要音符,也稱為音調)的八度之間的所有(十二個)半音組成。

我們可以很容易地為任何給定的鍵生成一個半音階:(i)在我們的筆記列表中找到該音符的索引,(ii)向左旋轉音符列表多次。

查找給定音符的索引

讓我們編寫一個簡單的函數來在此列表中查找特定的音符:

  1. def find_note_index(scale, search_note): 
  2.     ''' Given a scale, find the index of a particular note ''' 
  3.     for index, note in enumerate(scale): 
  4.         # Deal with situations where we have a list of enharmonic 
  5.         # equivalents, as well as just a single note as and str. 
  6.         if type(note) == list: 
  7.             if search_note in note: 
  8.                 return index 
  9.         elif type(note) == str: 
  10.             if search_note == note: 
  11.                 return index 

find_note_index()函數將一系列音符(scale)和要搜索的音符(search_note)作為參數,并通過簡單的線性搜索返回索引。我們在循環(huán)中處理兩種情況:(i)提供的音階由單個音符組成(例如上面的字母列表),或(ii)由音階等效音列表組成(例如上面的note或notes_basic列表)。下面是該函數對于這兩種情況的示例:

  1. >>> find_note_index(notes, 'A')    # notes is a list of lists 
  2. >>> find_note_index(alphabet, 'A') # alphabet is a list of notes 

向左旋轉音符

現在,我們可以編寫一個將給定scale旋轉n步的函數:

  1. def rotate(scale, n): 
  2.     ''' Left-rotate a scale by n positions. ''' 
  3.     return scale[n:] + scale[:n] 

我們在位置n處切割scale列表,并交換這兩半。這是將alphabet列表旋轉三個位置(將音符D放在前面)的示例:

  1. >>> alphabet 
  2. ['A''B''C''D''E''F''G'
  3. >>> rotate(alphabet, 3) 
  4. ['D''E''F''G''A''B''C'

在給定鍵中生成半音音階

現在,我們終于可以編寫我們的colour()函數了,該函數通過旋轉notes數組為給定的鍵生成一個半音音階:

  1. def chromatic(key): 
  2.     ''' Generate a chromatic scale in a given key. ''' 
  3.     # Figure out how much to rotate the notes list by and return 
  4.     # the rotated version. 
  5.     num_rotations = find_note_index(notes, key
  6.     return rotate(notes, num_rotations) 

上面的colour()函數在注釋列表中找到所提供鍵的索引(使用我們的find_note_index()函數),然后將其旋轉該量以使其移到最前面(使用我們的rotate()函數)。這是生成D半音音階的示例:

  1. >>> import pprint 
  2. >>> pprint.pprint(chromatic('D')) 
  3. [['C##''D''Ebb'], 
  4.  ['D#''Eb''Fbb'], 
  5.  ['D##''E''Fb'], 
  6.  ['E#''F''Gbb'], 
  7.  ['E##''F#''Gb'], 
  8.  ['F##''G''Abb'], 
  9.  ['G#''Ab'], 
  10.  ['G##''A''Bbb'], 
  11.  ['A#''Bb''Cbb'], 
  12.  ['A##''B''Cb'], 
  13.  ['B#''C''Dbb'], 
  14.  ['B##''C#''Db']] 

對于半音音階,通常在上升時使用銳利度,而在下降時使用平坦度。但是,就目前而言,我們將諧音等值保持不變。我們將看到如何選擇正確的音節(jié)以供以后使用。

間隔時間

間隔指定音符之間的相對距離。

因此,可以基于半音階音符與根音的相對距離來命名。以下是每個音節(jié)的標準名稱,其順序與音節(jié)列表中的索引相同:

  1. intervals = [ 
  2.     ['P1''d2'],  # Perfect unison   Diminished second 
  3.     ['m2''A1'],  # Minor second     Augmented unison 
  4.     ['M2''d3'],  # Major second     Diminished third 
  5.     ['m3''A2'],  # Minor third      Augmented second 
  6.     ['M3''d4'],  # Major third      Diminished fourth 
  7.     ['P4''A3'],  # Perfect fourth   Augmented third 
  8.     ['d5''A4'],  # Diminished fifth Augmented fourth 
  9.     ['P5''d6'],  # Perfect fifth    Diminished sixth 
  10.     ['m6''A5'],  # Minor sixth      Augmented fifth 
  11.     ['M6''d7'],  # Major sixth      Diminished seventh 
  12.     ['m7''A6'],  # Minor seventh    Augmented sixth 
  13.     ['M7''d8'],  # Major seventh    Diminished octave 
  14.     ['P8''A7'],  # Perfect octave   Augmented seventh 

同樣,同一音符可以具有不同的音程名稱。例如,根音可以被認為是完美的統一音色或減弱的第二音符。

從諧音等效中選取音符

給定鍵中的半音音階和上述數組中的間隔,我們可以指出要使用的確切音符(并從一組諧音等效項中過濾掉)。讓我們看一下執(zhí)行此操作的基本方法。

舉例來說,讓我們看一下如何從D色階中找到與M3或主要的第三音階相對應的音符。

1、從區(qū)間數組中,我們可以看到找到M3的索引為4。即'M3' in intervals[4] == True。

2、現在,我們在D半音音階(以其長度為模)中查看相同的索引。我們發(fā)現colour('D')[4]是音符['E ##','F#','Gb']的列表。

3、M3中的數字(即3)表示我們需要使用的字母,其中1表示根字母。因此,例如,對于D的鍵,1 = D,2 = E,3 = F,4 = G,5 = A,6 = B,7 = C,8 = D…等等。因此,我們需要在包含字母F的音節(jié)列表(['E ##','F#','Gb'])中尋找一個音節(jié)。這就是音節(jié)F#。

4、結論:相對于D的三分之一(M3)是F#。

以編程方式標記給定鍵的間隔

我們可以編寫一個相對簡單的函數,以編程方式為我們應用此邏輯,并為我們提供一個字典,將給定鍵中的所有音程名稱映射到正確的音符名稱:

  1. def make_intervals_standard(key): 
  2.     # Our labeled set of notes mapping interval names to notes 
  3.     labels = {} 
  4.      
  5.     # Step 1: Generate a chromatic scale in our desired key 
  6.     chromatic_scale = chromatic(key
  7.      
  8.     # The alphabets starting at provided key's alphabet 
  9.     alphabet_key = rotate(alphabet, find_note_index(alphabet, key[0])) 
  10.      
  11.     # Iterate through all intervals (list of lists) 
  12.     for index, interval_list in enumerate(intervals): 
  13.      
  14.         # Step 2: Find the notes to search through based on degree 
  15.         notes_to_search = chromatic_scale[index % len(chromatic_scale)] 
  16.          
  17.         for interval_name in interval_list: 
  18.             # Get the interval degree 
  19.             degree = int(interval_name[1]) - 1 # e.g. M3 --> 3, m7 --> 7 
  20.              
  21.             # Get the alphabet to look for 
  22.             alphabet_to_search = alphabet_key[degree % len(alphabet_key)] 
  23.              
  24.             try: 
  25.                 note = [x for x in notes_to_search if x[0] == alphabet_to_search][0] 
  26.             except
  27.                 note = notes_to_search[0] 
  28.              
  29.             labels[interval_name] = note 
  30.  
  31.     return labels 

這是我們返回C鍵的字典:

  1. >>> import pprint 
  2. >>> pprint.pprint(make_intervals_standard('C'), sort_dicts=False
  3. {'P1''C'
  4.  'd2''Dbb'
  5.  'm2''Db'
  6.  'A1''C#'
  7.  'M2''D'
  8.  'd3''Ebb'
  9.  'm3''Eb'
  10.  'A2''D#'
  11.  'M3''E'
  12.  'd4''Fb'
  13.  'P4''F'
  14.  'A3''E#'
  15.  'd5''Gb'
  16.  'A4''F#'
  17.  'P5''G'
  18.  'd6''Abb'
  19.  'm6''Ab'
  20.  'A5''G#'
  21.  'M6''A'
  22.  'd7''Bbb'
  23.  'm7''Bb'
  24.  'A6''A#'
  25.  'M7''B'
  26.  'd8''Cb'
  27.  'P8''C'
  28.  'A7''B#'

間隔公式

現在,我們可以使用間隔名稱指定公式或音節(jié)組,并能夠將它們映射到我們想要的任何鍵:

  1. def make_formula(formula, labeled): 
  2.     ''
  3.     Given a comma-separated interval formula, and a set of labeled 
  4.     notes in a keyreturn the notes of the formula. 
  5.     ''
  6.     return [labeled[x] for x in formula.split(',')] 

大音階公式

例如,大音階的公式為:

  1. formula = 'P1,M2,M3,P4,P5,M6,M7,P8' 

我們可以使用它輕松地為不同的鍵生成主音階,如下所示:

  1. >>> for key in alphabet: 
  2. >>>     print(key, make_formula(formula, make_intervals_standard(key))) 
  3. C ['C''D''E''F''G''A''B''C'
  4. D ['D''E''F#''G''A''B''C#''D'
  5. E ['E''F#''G#''A''B''C#''D#''E'
  6. F ['F''G''A''Bb''C''D''E''F'
  7. G ['G''A''B''C''D''E''F#''G'
  8. A ['A''B''C#''D''E''F#''G#''A'
  9. B ['B''C#''D#''E''F#''G#''A#''B'

美化音階

我們還快速編寫一個更好的方法來打印音階的函數:

  1. def dump(scale, separator=' '): 
  2.     ''
  3.     Pretty-print the notes of a scale. Replaces b and # characters 
  4.     for unicode flat and sharp symbols. 
  5.     ''
  6.     return separator.join(['{:<3s}'.format(x) for x in scale]) \ 
  7.                     .replace('b''\u266d') \ 
  8.                     .replace('#''\u266f'

這是使用正確的unicode字符的更好輸出:

  1. >>> for key in alphabet: 
  2. >>>     scale = make_formula(formula, make_intervals_standard(key)) 
  3. >>>     print('{}: {}'.format(key, dump(scale))) 
  4. C: C   D   E   F   G   A   B   C 
  5. D: D   E   F♯  G   A   B   C♯  D 
  6. E: E   F♯  G♯  A   B   C♯  D♯  E 
  7. F: F   G   A   B♭  C   D   E   F 
  8. G: G   A   B   C   D   E   F♯  G 
  9. A: A   B   C♯  D   E   F♯  G♯  A 
  10. B: B   C♯  D♯  E   F♯  G♯  A♯  B 

對公式使用大音階區(qū)間

公式命名的另一種方法是基于主要標準的音節(jié)。彈奏樂器時這會更容易,因為如果您熟悉其主要音階,則可以在給定的琴鍵中獲得音階和和弦。

以下是相對于給定鍵中主音階的音程名稱:

  1. intervals_major = [ 
  2.     [ '1''bb2'], 
  3.     ['b2',  '#1'], 
  4.     [ '2''bb3',   '9'], 
  5.     ['b3',  '#2'], 
  6.     [ '3',  'b4'], 
  7.     [ '4',  '#3',  '11'], 
  8.     ['b5',  '#4''#11'], 
  9.     [ '5''bb6'], 
  10.     ['b6',  '#5'], 
  11.     [ '6''bb7',  '13'], 
  12.     ['b7',  '#6'], 
  13.     [ '7',  'b8'], 
  14.     [ '8',  '#7'], 

我還添加了用于更復雜的和弦(第9、11和13)的常用音程。這些本質上是圍繞模八進行包裝的。因此,例如,第9位只是第2位,但高了八度。

我們還可以修改我們的make_intervals()函數以使用此函數:

  1. def make_intervals(key, interval_type='standard'): 
  2.     ... 
  3.     for index, interval_list in enumerate(intervals): 
  4.         ... 
  5.         intervs = intervals if interval_type == 'standard' else intervals_major 
  6.         for interval_name in intervs: 
  7.             # Get the interval degree 
  8.             if interval_type == 'standard'
  9.                 degree = int(interval_name[1]) - 1 # e.g. M3 --> 3, m7 --> 7 
  10.             elif interval_type == 'major'
  11.                 degree = int(re.sub('[b#]''', interval_name)) - 1 
  12.             ... 
  13.     return labels 

上面,我們剛剛向make_intervals()函數添加了一個新參數(interval_type),并在內部循環(huán)中以不同的方式計算degree度數。如果將interval_type指定為'major',則只需刪除所有b和#字符,然后再轉換為整數以獲取度數即可。

推導通用音階和和弦

這是一堆涵蓋最常見音階和和弦的公式:

  1. formulas = { 
  2.     # Scale formulas 
  3.     'scales': { 
  4.         # Major scale, its modes, and minor scale 
  5.         'major':              '1,2,3,4,5,6,7'
  6.         'minor':              '1,2,b3,4,5,b6,b7'
  7.         # Melodic minor and its modes 
  8.         'melodic_minor':      '1,2,b3,4,5,6,7'
  9.         # Harmonic minor and its modes 
  10.         'harmonic_minor':     '1,2,b3,4,5,b6,7'
  11.         # Blues scales 
  12.         'major_blues':        '1,2,b3,3,5,6'
  13.         'minor_blues':        '1,b3,4,b5,5,b7'
  14.         # Penatatonic scales 
  15.         'pentatonic_major':   '1,2,3,5,6'
  16.         'pentatonic_minor':   '1,b3,4,5,b7'
  17.         'pentatonic_blues':   '1,b3,4,b5,5,b7'
  18.     }, 
  19.     'chords': { 
  20.         # Major 
  21.         'major':              '1,3,5'
  22.         'major_6':            '1,3,5,6'
  23.         'major_6_9':          '1,3,5,6,9'
  24.         'major_7':            '1,3,5,7'
  25.         'major_9':            '1,3,5,7,9'
  26.         'major_13':           '1,3,5,7,9,11,13'
  27.         'major_7_#11':        '1,3,5,7,#11'
  28.         # Minor 
  29.         'minor':              '1,b3,5'
  30.         'minor_6':            '1,b3,5,6'
  31.         'minor_6_9':          '1,b3,5,6,9'
  32.         'minor_7':            '1,b3,5,b7'
  33.         'minor_9':            '1,b3,5,b7,9'
  34.         'minor_11':           '1,b3,5,b7,9,11'
  35.         'minor_7_b5':         '1,b3,b5,b7'
  36.         # Dominant 
  37.         'dominant_7':         '1,3,5,b7'
  38.         'dominant_9':         '1,3,5,b7,9'
  39.         'dominant_11':        '1,3,5,b7,9,11'
  40.         'dominant_13':        '1,3,5,b7,9,11,13'
  41.         'dominant_7_#11':     '1,3,5,b7,#11'
  42.         # Diminished 
  43.         'diminished':         '1,b3,b5'
  44.         'diminished_7':       '1,b3,b5,bb7'
  45.         'diminished_7_half':  '1,b3,b5,b7'
  46.         # Augmented 
  47.         'augmented':          '1,3,#5'
  48.         # Suspended 
  49.         'sus2':               '1,2,5'
  50.         'sus4':               '1,4,5'
  51.         '7sus2':              '1,2,5,b7'
  52.         '7sus4':              '1,4,5,b7'
  53.     }, 

這是在C鍵中生成所有這些音階和和弦時的輸出:

  1. intervs = make_intervals('C''major'
  2. for ftype in formulas: 
  3.     print(ftype) 
  4.     for name, formula in formulas[ftype].items(): 
  5.         v = make_formula(formula, intervs) 
  6.         print('\t{}: {}'.format(name, dump(v))) 
  7. scales 
  8.     major: C   D   E   F   G   A   B 
  9.     minor: C   D   E♭  F   G   A♭  B♭ 
  10.     melodic_minor: C   D   E♭  F   G   A   B 
  11.     harmonic_minor: C   D   E♭  F   G   A♭  B 
  12.     major_blues: C   D   E♭  E   G   A 
  13.     minor_blues: C   E♭  F   G♭  G   B♭ 
  14.     pentatonic_major: C   D   E   G   A 
  15.     pentatonic_minor: C   E♭  F   G   B♭ 
  16.     pentatonic_blues: C   E♭  F   G♭  G   B♭ 
  17. chords 
  18.     major: C   E   G 
  19.     major_6: C   E   G   A 
  20.     major_6_9: C   E   G   A   D 
  21.     major_7: C   E   G   B 
  22.     major_9: C   E   G   B   D 
  23.     major_13: C   E   G   B   D   F   A 
  24.     major_7_#11: C   E   G   B   F♯ 
  25.     minor: C   E♭  G 
  26.     minor_6: C   E♭  G   A 
  27.     minor_6_9: C   E♭  G   A   D 
  28.     minor_7: C   E♭  G   B♭ 
  29.     minor_9: C   E♭  G   B♭  D 
  30.     minor_11: C   E♭  G   B♭  D   F 
  31.     minor_7_b5: C   E♭  G♭  B♭ 
  32.     dominant_7: C   E   G   B♭ 
  33.     dominant_9: C   E   G   B♭  D 
  34.     dominant_11: C   E   G   B♭  D   F 
  35.     dominant_13: C   E   G   B♭  D   F   A 
  36.     dominant_7_#11: C   E   G   B♭  F♯ 
  37.     diminished: C   E♭  G♭ 
  38.     diminished_7: C   E♭  G♭  B♭♭ 
  39.     diminished_7_half: C   E♭  G♭  B♭ 
  40.     augmented: C   E   G♯ 
  41.     sus2: C   D   G 
  42.     sus4: C   F   G 
  43.     7sus2: C   D   G   B♭ 
  44.     7sus4: C   F   G   B♭ 

模式

模式本質上是刻度的左旋。

  1. mode = rotate 

需要注意的是,由于旋轉后的根音會發(fā)生變化,因此所得到的旋轉比例或模式處于不同的鍵中。

對于每個鍵,主要有七個主要音階模式,具體取決于所應用的左旋次數,每個模式都有一個特定的名稱:

  1. major_mode_rotations = { 
  2.     'Ionian':     0, 
  3.     'Dorian':     1, 
  4.     'Phrygian':   2, 
  5.     'Lydian':     3, 
  6.     'Mixolydian': 4, 
  7.     'Aeolian':    5, 
  8.     'Locrian':    6, 

使用此方法,我們現在可以為任何給定鍵生成主要比例的模式。這是C大調的一個例子:

  1. intervs = make_intervals('C''major'
  2. c_major_scale = make_formula(formulas['scales']['major'], intervs) 
  3. for m in major_mode_rotations: 
  4.     v = mode(c_major_scale, major_mode_rotations[m]) 
  5.     print('{} {}: {}'.format(dump([v[0]]), m, dump(v))) 

這就是結果。請記住,根音隨著每次旋轉而變化:

  1. C   Ionian: C   D   E   F   G   A   B 
  2. D   Dorian: D   E   F   G   A   B   C 
  3. E   Phrygian: E   F   G   A   B   C   D 
  4. F   Lydian: F   G   A   B   C   D   E 
  5. G   Mixolydian: G   A   B   C   D   E   F 
  6. A   Aeolian: A   B   C   D   E   F   G 
  7. B   Locrian: B   C   D   E   F   G   A 

上面,我們正在研究從給定比例導出的模式。但是,實際上我們關心的是給定鍵的模式。因此,給定C的鍵,我們想知道C Ionian,C Dorian,C Mixolydian等。

另一種表達方式是,例如“ C Mixolidian”與“the Mixolydian of C”不同。前者是指根音為C的混合音階,后者是指C大音階的混合音階(即上方的G混合音階)。

我們還可以非常輕松地在給定鍵中生成模式。

  1. keys = [ 
  2.     'B#',  'C''C#''Db''D''D#',  'Eb''E',  'Fb''E#',  'F'
  3.     'F#''Gb''G''G#',  'Ab''A''A#',  'Bb''B',  'Cb'
  4.  
  5. modes = {} 
  6. for key in keys: 
  7.     intervs = make_intervals(key'major'
  8.     c_major_scale = make_formula(formulas['scales']['major'], intervs) 
  9.     for m in major_mode_rotations: 
  10.         v = mode(c_major_scale, major_mode_rotations[m]) 
  11.         if v[0] not in modes: 
  12.             modes[v[0]] = {} 
  13.         modes[v[0]][m] = v 

上面,我們循環(huán)了每個鍵,并建立了一個字典,其中包含我們遇到每個鍵時所使用的模式(通過檢查模式的第一個音符)。

現在,例如,如果我們打印出模式['C'],則會得到以下內容:

總結

 

因此,我們研究了西方音樂理論中的基本音符。如何從這些音節(jié)中得出音階。如何利用間隔名稱從諧音等效項中選擇正確的音符。然后,我們研究了如何使用間隔公式(使用標準音程名稱和相對于大音階的音程)來生成各種音階和和弦。最后,我們看到模式只是音階的旋轉,對于給定的鍵可以用兩種方式查看:通過旋轉給定鍵的音階(將在另一個鍵中)得出的模式,以及從模式中得出的模式。從某些鍵開始,這樣第一個音符就是我們想要的鍵。

 

責任編輯:武曉燕 來源: Python中文社區(qū)
相關推薦

2015-08-10 11:09:09

Python代碼Python

2024-12-19 14:00:00

2023-11-29 08:10:36

javascriptH5游戲

2018-03-22 13:58:06

Python換臉程序

2020-04-02 15:39:51

代碼編譯器前端

2021-01-15 13:20:06

Python國產庫musicpy

2018-04-24 10:45:00

Python人工智能圖像識別

2020-11-10 08:37:05

Python線性回歸機器學習

2022-09-28 10:12:50

Python代碼可視化

2024-04-30 08:05:15

Rust代碼計算

2020-05-11 17:12:52

換臉Python圖像

2016-12-02 08:53:18

Python一行代碼

2020-02-25 11:15:46

代碼開發(fā)AI

2018-01-05 14:48:03

前端JavaScript富文本編輯器

2014-06-19 10:02:32

Haskell代碼

2019-10-17 21:37:28

微信飛機大戰(zhàn)Python

2019-10-09 15:51:45

Python 開發(fā)編程語言

2020-07-19 10:57:45

滿天星繪制代碼

2014-10-30 16:34:28

編程技術算法

2014-10-30 16:41:14

編程技術算法
點贊
收藏

51CTO技術棧公眾號

日本成人性视频| 亚洲永久免费观看| 精品人妻互换一区二区三区| 欧美xx视频| 中文字幕亚洲不卡| 国产区欧美区日韩区| 亚洲色成人www永久网站| 婷婷综合五月| 日韩精品999| 免费在线观看污网站| 黄网站在线观| 中文字幕欧美区| 国产精品免费视频一区二区| 波多野结衣黄色| 伊人成人在线视频| 视频在线观看99| 日b视频在线观看| 亚洲日韩中文字幕一区| 精品女同一区二区三区在线播放| 在线观看欧美激情| 欧美老女人性开放| 福利91精品一区二区三区| 精品久久久精品| 午夜精品区一区二区三| 少妇精品高潮欲妇又嫩中文字幕 | 日韩精品欧美大片| 欧美一区中文字幕| 天堂网在线免费观看| 欧美巨大丰满猛性社交| 亚洲一区二区在线播放相泽| 水蜜桃一区二区三区| 少妇精品视频一区二区| 国产精品123| 国产自摸综合网| 无码久久精品国产亚洲av影片| 亚洲激情网站| 欧美国产日韩中文字幕在线| 在线视频这里只有精品| 精品国产乱码久久久| 亚洲精品www久久久久久广东| 中文字幕第66页| 台湾天天综合人成在线| 欧美日韩一区中文字幕| 国产无套粉嫩白浆内谢的出处| 123区在线| 亚洲在线视频免费观看| 免费看污污视频| 国产激情视频在线| 亚洲欧美综合另类在线卡通| 亚洲第一在线综合在线| 波多野结衣在线影院| 久久久不卡影院| 欧美亚州在线观看| 国产免费av高清在线| 26uuu欧美| 欧美二区在线| 第一福利在线| 国产精品色眯眯| 在线视频不卡一区二区| 秋霞午夜在线观看| 亚洲情趣在线观看| 精品国产一区二区三区在线| 黄色网页在线播放| 亚洲日本va午夜在线影院| 日韩视频在线免费播放| 中文在线手机av| 亚洲国产wwwccc36天堂| 久久综合色视频| 午夜av成人| 欧美日韩国产乱码电影| av在线免费看片| 伊人久久影院| 亚洲精品v欧美精品v日韩精品 | 国产午夜精品一区二区| 视频一区亚洲| gogo在线观看| 精品久久久香蕉免费精品视频| 欧美精品99久久| 国产超碰精品| 7777精品伊人久久久大香线蕉的 | 亚洲大奶少妇| 日韩激情av在线播放| 第一次破处视频| 99精品在线免费在线观看| 久久99久久久久久久噜噜| 日韩三级一区二区三区| 久久亚洲欧洲| 亚洲wwwav| 视频国产一区二区三区| 国产精品你懂的| 欧美这里只有精品| 性欧美1819sex性高清| 91精品国产色综合久久久蜜香臀| 特级特黄刘亦菲aaa级| 国产一区二区精品福利地址| 久久精品亚洲精品| 成人午夜视频精品一区| 免费欧美在线视频| 国产成人精品一区二区三区福利| 可以在线观看的黄色| 亚洲色图制服丝袜| 北条麻妃69av| 日韩精品三级| 一区国产精品视频| 日本少妇性生活| 免费成人在线影院| 国产在线一区二区三区四区| 丝袜美腿美女被狂躁在线观看| 亚洲图片欧美一区| 超碰在线公开97| 欧美1区二区| 久久成年人视频| 美女黄页在线观看| 99精品欧美一区二区三区小说| 亚洲精品乱码视频| 新版的欧美在线视频| 欧美一级国产精品| 少妇愉情理伦三级| 久久不射2019中文字幕| 97免费资源站| 好了av在线| 欧美色图第一页| 美女100%无挡| 亚洲青色在线| caoporn国产精品免费公开| 91精品国产91久久久久游泳池 | 欧美黄色性生活| 蜜桃久久久久| 欧美国产极速在线| 国产免费黄色片| 国产精品毛片a∨一区二区三区| 无码人妻精品一区二区三区在线| 亚洲国产中文在线| 久久久国产成人精品| 日本中文字幕在线观看视频| 99久久国产综合精品女不卡| 成年人视频大全| 国产精品一区二区精品视频观看| 一区二区亚洲欧洲国产日韩| 无码视频一区二区三区| 久久无码av三级| 成人黄色片视频| 西瓜成人精品人成网站| 97国产精品视频| 手机看片福利永久| 午夜精品久久久久久久99水蜜桃| 师生出轨h灌满了1v1| 亚洲视频电影在线| 91九色对白| a免费在线观看| 日韩一二三四区| 波多野结衣不卡视频| 国产一区二区精品久久99| 久久99国产精品一区| 欧美不卡在线观看| 久久久久国产精品一区| 四虎永久在线精品免费网址| 精品福利在线看| 好吊日免费视频| 日日摸夜夜添夜夜添精品视频| 欧美日韩一区在线观看视频| 欧美aaa视频| 最新中文字幕亚洲| 国产视频手机在线| 一区二区三区精品在线观看| 超碰caoprom| 亚洲一区区二区| 深夜福利成人| 91麻豆精品国产综合久久久| 欧美精品一区二区三区国产精品 | 成人黄色一级视频| 阿v天堂2017| 成人综合久久| 91久久伊人青青碰碰婷婷| 不卡av免费观看| 亚洲美女久久久| 一级特黄色大片| 亚洲午夜免费视频| 爱爱免费小视频| 蜜臀91精品一区二区三区| 久久亚洲a v| 台湾亚洲精品一区二区tv| 国产精品第二页| 一区二区三区伦理| 亚洲免费av电影| 国产一区二区波多野结衣| 亚洲国产精品一区二区www在线| 日本黄色动态图| 捆绑紧缚一区二区三区视频| 日韩欧美猛交xxxxx无码| 国产一区二区观看| 99中文视频在线| www成人在线视频| 欧美激情久久久| 18视频免费网址在线观看| 精品少妇一区二区三区| 波多野结衣一区二区在线| 亚洲精品日日夜夜| 蜜桃av免费看| 国产不卡在线一区| 亚洲欧美日韩一级| 亚洲精品裸体| 米仓穗香在线观看| 国语产色综合| 国内精品二区| 国产一区二区视频在线看| 青青草精品毛片| 色呦呦在线视频| 中文字幕日韩精品有码视频| 人妻精品一区二区三区| 欧美日韩国产精品成人| 国产专区第一页| 亚洲影院久久精品| 91精品少妇一区二区三区蜜桃臀| 久久亚洲综合色一区二区三区 | 久久亚洲综合色| 亚洲精品久久一区二区三区777 | 黑森林av导航| 国产一区二区0| 国产三级三级看三级| 国产亚洲午夜| 成人性生活视频免费看| 亚洲欧美综合国产精品一区| 视频一区免费观看| 羞羞色国产精品网站| 成人免费视频网站| 国产aa精品| 国产在线播放91| a成人v在线| 国产精品福利片| 成人福利av| 欧美中文字幕第一页| www.超碰在线| 欧美激情aaaa| 日本片在线观看| 欧美精品性视频| 亚洲wwwww| 欧美精品在线免费播放| 国产色在线观看| 久久国产精品电影| 黄色网址在线免费| 欧美成人一区在线| v片在线观看| 欧美精品在线免费播放| 日本乱理伦在线| 欧美激情性做爰免费视频| 日本成人不卡| 午夜精品久久久久久久久久久久久 | 欧美综合在线观看视频| 亚洲综合好骚| 国产成人无码av在线播放dvd| 久久福利影视| 久热精品在线播放| 精品午夜久久福利影院| 午夜大片在线观看| 国产激情一区二区三区| 中文字幕1区2区| 99久久婷婷国产精品综合| 国产精品第七页| 国产欧美日韩不卡| 男人av资源站| 亚洲成人精品一区二区| 成人毛片18女人毛片| 在线观看日韩一区| 国产一区二区三区中文字幕| 欧美一卡在线观看| 天堂av手机版| 亚洲一品av免费观看| 在线观看免费高清完整| 欧美成人免费在线观看| 碰碰在线视频| 国产日韩精品电影| 51亚洲精品| 色999日韩自偷自拍美女| 四季av一区二区凹凸精品| 91国在线高清视频| 亚洲欧美成人综合| 91亚洲精品久久久蜜桃借种| 成人国产一区二区三区精品| 亚洲精品视频久久久| 国产精品国产三级国产aⅴ入口 | 一级性生活毛片| 中文字幕一区二区视频| 久视频在线观看| 欧美最猛黑人xxxxx猛交| 国产精品自偷自拍| 精品亚洲va在线va天堂资源站| 91免费在线| 538国产精品一区二区在线| 国产精品久久久久久妇女| 国产精品12| 久久在线播放| 午夜精品久久久久久久无码| 久久福利资源站| 自拍视频一区二区| 亚洲同性gay激情无套| 国产一级精品视频| 欧美一二区视频| melody高清在线观看| 高清在线视频日韩欧美| 欧美xxxx性| 免费国产一区| 欧美日韩综合| 亚洲国产高清av| 久久久99精品免费观看| 免费在线视频观看| 欧美日韩国产高清一区二区| 青草久久伊人| 亚州欧美日韩中文视频| 日韩高清一区| 黄色一级片网址| 日韩一区精品字幕| 久久一区二区电影| 亚洲一区二区在线免费观看视频| 中文av免费观看| 亚洲欧美变态国产另类| 国产精品国精产品一二| 91理论片午午论夜理片久久| 久操精品在线| 久久成人免费观看| 国产成人aaa| 加勒比婷婷色综合久久| 欧美日韩国产首页在线观看| 成人高清免费观看mv| 51精品国产黑色丝袜高跟鞋| 精品一区二区男人吃奶| 国产va亚洲va在线va| 国产尤物一区二区在线| 极品蜜桃臀肥臀-x88av| 色天使久久综合网天天| 亚洲人午夜射精精品日韩| 欧美激情xxxx| 97se亚洲| 日韩精品一区二区在线视频 | 免费一级做a爰片久久毛片潮| 亚洲电影在线免费观看| 国产ts变态重口人妖hd| 久久偷看各类女兵18女厕嘘嘘| 国产欧美在线观看免费| 亚洲精品一品区二品区三品区| 玖玖国产精品视频| 性少妇bbw张开| 欧美影视一区二区三区| melody高清在线观看| 国产精品一区专区欧美日韩| 欧美一区二区三区高清视频| 日韩一级理论片| 中文字幕av免费专区久久| 一区二区国产欧美| 日韩性xxxx爱| 精品久久久久久久久久岛国gif| 伊人色综合影院| 国产一区二区电影| 精品无码黑人又粗又大又长| 亚洲国产91色在线| 亚洲同志男男gay1069网站| 奇米精品在线| 欧美aⅴ一区二区三区视频| 东京热无码av男人的天堂| 欧美精品久久天天躁| 99在线视频观看| 国产欧美日韩一区| 免费视频一区二区三区在线观看| 人妻视频一区二区| 91精品国产欧美一区二区18| 欧美日韩色网| 美女一区视频| 九九久久精品视频| 九九九在线视频| 亚洲精品中文字幕av| 欧美aaaaaa| 蜜臀精品一区二区| 国产肉丝袜一区二区| 国产又大又长又粗| 久久久久久久久中文字幕| 亚洲色图丝袜| 亚洲色图欧美自拍| 激情成人中文字幕| 8888四色奇米在线观看| 91原创国产| 日本午夜一本久久久综合| 免费在线观看h片| 日韩精品亚洲视频| 青草综合视频| 日本日本19xxxⅹhd乱影响| 国产精品视频免费| 亚洲毛片在线播放| 国产精品久久久久久久久| 综合久久综合| 男生草女生视频| 欧美成人精品高清在线播放| 在线中文字幕播放| 免费成人深夜夜行网站视频| 不卡一区二区中文字幕| 伊人网免费视频| 午夜免费日韩视频| 欧美电影三区| 波多野吉衣中文字幕| 精品美女在线播放| 色综合一区二区日本韩国亚洲|