日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 小型项目大全 36~40

發布時間:2024/1/8 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 小型项目大全 36~40 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

三十六、沙漏

原文:http://inventwithpython.com/bigbookpython/project36.html

這個可視化程序有一個粗糙的物理引擎,模擬沙子通過沙漏的小孔落下。沙子堆積在沙漏的下半部分;然后把沙漏翻過來,重復這個過程。

運行示例

圖 36-1 顯示了運行hourglass.py時的輸出。

:沙漏程序在落砂時的輸出

工作原理

沙漏程序實現了一個基本的物理引擎。一個物理引擎是模擬物理物體在重力作用下下落,相互碰撞,按照物理定律運動的軟件。你會發現在視頻游戲、計算機動畫和科學模擬中使用的物理引擎。在第 91 到 102 行,每一粒沙子檢查它下面的空間是否是空的,如果是,就向下移動。否則,它檢查它是否可以向左下方移動(第 104 到 112 行)或向右下方移動(第 114 到 122 行)。當然,運動學,經典物理學的一個分支,處理宏觀物體的運動,遠不止這些。然而,你不需要一個物理學學位來制作一個沙漏中沙子的原始模擬,它看起來是令人愉快的。

"""Hourglass, by Al Sweigart email@protected An animation of an hourglass with falling sand. Press Ctrl-C to stop. This code is available at https://nostarch.com/big-book-small-python-programming Tags: large, artistic, bext, simulation"""import random, sys, timetry:import bext except ImportError:print('This program requires the bext module, which you')print('can install by following the instructions at')print('https://pypi.org/project/Bext/')sys.exit()# Set up the constants: PAUSE_LENGTH = 0.2 # (!) Try changing this to 0.0 or 1.0. # (!) Try changing this to any number between 0 and 100: WIDE_FALL_CHANCE = 50SCREEN_WIDTH = 79 SCREEN_HEIGHT = 25 X = 0 # The index of X values in an (x, y) tuple is 0. Y = 1 # The index of Y values in an (x, y) tuple is 1. SAND = chr(9617) WALL = chr(9608)# Set up the walls of the hour glass: HOURGLASS = set() # Has (x, y) tuples for where hourglass walls are. # (!) Try commenting out some HOURGLASS.add() lines to erase walls: for i in range(18, 37):HOURGLASS.add((i, 1)) # Add walls for the top cap of the hourglass.HOURGLASS.add((i, 23)) # Add walls for the bottom cap. for i in range(1, 5):HOURGLASS.add((18, i)) # Add walls for the top left straight wall.HOURGLASS.add((36, i)) # Add walls for the top right straight wall.HOURGLASS.add((18, i + 19)) # Add walls for the bottom left.HOURGLASS.add((36, i + 19)) # Add walls for the bottom right. for i in range(8):HOURGLASS.add((19 + i, 5 + i)) # Add the top left slanted wall.HOURGLASS.add((35 - i, 5 + i)) # Add the top right slanted wall.HOURGLASS.add((25 - i, 13 + i)) # Add the bottom left slanted wall.HOURGLASS.add((29 + i, 13 + i)) # Add the bottom right slanted wall.# Set up the initial sand at the top of the hourglass: INITIAL_SAND = set() for y in range(8):for x in range(19 + y, 36 - y):INITIAL_SAND.add((x, y + 4))def main():bext.fg('yellow')bext.clear()# Draw the quit message:bext.goto(0, 0)print('Ctrl-C to quit.', end='')# Display the walls of the hourglass:for wall in HOURGLASS:bext.goto(wall[X], wall[Y])print(WALL, end='')while True: # Main program loop.allSand = list(INITIAL_SAND)# Draw the initial sand:for sand in allSand:bext.goto(sand[X], sand[Y])print(SAND, end='')runHourglassSimulation(allSand)def runHourglassSimulation(allSand):"""Keep running the sand falling simulation until the sand stopsmoving."""while True: # Keep looping until sand has run out.random.shuffle(allSand) # Random order of grain simulation.sandMovedOnThisStep = Falsefor i, sand in enumerate(allSand):if sand[Y] == SCREEN_HEIGHT - 1:# Sand is on the very bottom, so it won't move:continue# If nothing is under this sand, move it down:noSandBelow = (sand[X], sand[Y] + 1) not in allSandnoWallBelow = (sand[X], sand[Y] + 1) not in HOURGLASScanFallDown = noSandBelow and noWallBelowif canFallDown:# Draw the sand in its new position down one space:bext.goto(sand[X], sand[Y])print(' ', end='') # Clear the old position.bext.goto(sand[X], sand[Y] + 1)print(SAND, end='')# Set the sand in its new position down one space:allSand[i] = (sand[X], sand[Y] + 1)sandMovedOnThisStep = Trueelse:# Check if the sand can fall to the left:belowLeft = (sand[X] - 1, sand[Y] + 1)noSandBelowLeft = belowLeft not in allSandnoWallBelowLeft = belowLeft not in HOURGLASSleft = (sand[X] - 1, sand[Y])noWallLeft = left not in HOURGLASSnotOnLeftEdge = sand[X] > 0canFallLeft = (noSandBelowLeft and noWallBelowLeftand noWallLeft and notOnLeftEdge)# Check if the sand can fall to the right:belowRight = (sand[X] + 1, sand[Y] + 1)noSandBelowRight = belowRight not in allSandnoWallBelowRight = belowRight not in HOURGLASSright = (sand[X] + 1, sand[Y])noWallRight = right not in HOURGLASSnotOnRightEdge = sand[X] < SCREEN_WIDTH - 1canFallRight = (noSandBelowRight and noWallBelowRightand noWallRight and notOnRightEdge)# Set the falling direction:fallingDirection = Noneif canFallLeft and not canFallRight:fallingDirection = -1 # Set the sand to fall left.elif not canFallLeft and canFallRight:fallingDirection = 1 # Set the sand to fall right.elif canFallLeft and canFallRight:# Both are possible, so randomly set it:fallingDirection = random.choice((-1, 1))# Check if the sand can "far" fall two spaces to# the left or right instead of just one space:if random.random() * 100 <= WIDE_FALL_CHANCE:belowTwoLeft = (sand[X] - 2, sand[Y] + 1)noSandBelowTwoLeft = belowTwoLeft not in allSandnoWallBelowTwoLeft = belowTwoLeft not in HOURGLASSnotOnSecondToLeftEdge = sand[X] > 1canFallTwoLeft = (canFallLeft and noSandBelowTwoLeftand noWallBelowTwoLeft and notOnSecondToLeftEdge)belowTwoRight = (sand[X] + 2, sand[Y] + 1)noSandBelowTwoRight = belowTwoRight not in allSandnoWallBelowTwoRight = belowTwoRight not in HOURGLASSnotOnSecondToRightEdge = sand[X] < SCREEN_WIDTH - 2canFallTwoRight = (canFallRightand noSandBelowTwoRight and noWallBelowTwoRightand notOnSecondToRightEdge)if canFallTwoLeft and not canFallTwoRight:fallingDirection = -2elif not canFallTwoLeft and canFallTwoRight:fallingDirection = 2elif canFallTwoLeft and canFallTwoRight:fallingDirection = random.choice((-2, 2))if fallingDirection == None:# This sand can't fall, so move on.continue# Draw the sand in its new position:bext.goto(sand[X], sand[Y])print(' ', end='') # Erase old sand.bext.goto(sand[X] + fallingDirection, sand[Y] + 1)print(SAND, end='') # Draw new sand.# Move the grain of sand to its new position:allSand[i] = (sand[X] + fallingDirection, sand[Y] + 1)sandMovedOnThisStep = Truesys.stdout.flush() # (Required for bext-using programs.)time.sleep(PAUSE_LENGTH) # Pause after this# If no sand has moved on this step, reset the hourglass:if not sandMovedOnThisStep:time.sleep(2)# Erase all of the sand:for sand in allSand:bext.goto(sand[X], sand[Y])print(' ', end='')break # Break out of main simulation loop.# If this program was run (instead of imported), run the game: if __name__ == '__main__':try:main()except KeyboardInterrupt:sys.exit() # When Ctrl-C is pressed, end the program.

在輸入源代碼并運行幾次之后,嘗試對其進行實驗性的修改。標有(!)的注釋對你可以做的小改變有建議。你也可以自己想辦法做到以下幾點:

  • 創建除沙漏以外的墻壁形狀。
  • 在屏幕上創建點,不斷涌出新的沙粒。

探索程序

試著找出下列問題的答案。嘗試對代碼進行一些修改,然后重新運行程序,看看這些修改有什么影響。

  • 如果把第 31 行的range(18, 37)改成range(18, 30)會怎么樣?
  • 如果把第 39 行的range(8)改成range(0)會怎么樣?
  • 如果把第 82 行的sandMovedOnThisStep = False改成sandMovedOnThisStep = True會怎么樣?
  • 如果把 125 行的fallingDirection = None改成fallingDirection = 1會怎么樣?
  • 如果把 136 行的random.random() * 100 <= WIDE_FALL_CHANCE改成random.random() * 0 <= WIDE_FALL_CHANCE會怎么樣?
  • 三十七、饑餓機器人

    原文:http://inventwithpython.com/bigbookpython/project37.html

    你和饑餓的機器人被困在一個迷宮里!你不知道機器人為什么需要吃飯,但你也不想知道。機器人的程序設計很糟糕,即使被墻擋住,它們也會直接向你移動。你必須欺騙機器人互相碰撞(或死亡的機器人)而不被抓住。

    你有一個個人傳送裝置,可以把你送到一個隨機的新地方,但它的電池只夠兩次旅行。此外,你和機器人可以溜過角落!

    運行示例

    當您運行hungryrobots.py時,輸出將如下所示:

    Hungry Robots, by Al Sweigart email@protected `--snip--` ???????????????????????????????????????? ? ? R R ? ? ? ? ? ??? R? ?? ? ? ? ? ? ? ? ? ??? ? ? R? ? ? ?? ?? ? ? ? ?? ? ? ??? ? ? ? ? ?? ? RX??? ? ? ? ? ? ? ? R R R ? ? ? ? ? ? ? ? R ? ? ? ? R R ? R ? R ? ? ? ? ? ? ? ? ? ? ? @ ? ? R??? ? ? ? ? ?? ?? ? ? ? ? ?? ? ? R ?? ??X ? ? ? R ??RR ? R ? ?RR R R ? ? ? R? ? ?? RRR R ? ? ??R ? ? ? R ? ? ? ? ???????????????????????????????????????? (T)eleports remaining: 2(Q) (W) ( )(A) (S) (D) Enter move or QUIT: (Z) (X) ( ) `--snip--`

    工作原理

    在這個游戲中代表位置的 x 和 y 笛卡爾坐標允許我們使用數學來確定機器人應該移動的方向。在編程中,x 坐標向右增加,y 坐標向下增加。這意味著如果機器人的 x 坐標大于玩家的坐標,它應該向左移動(即代碼應該從其當前的 x 坐標中減去)以靠近玩家。如果機器人的 x 坐標更小,它應該向右移動(也就是說,代碼應該添加到其當前的 x 坐標中)。這同樣適用于基于相對 y 坐標的上下移動。

    """Hungry Robots, by Al Sweigart email@protected Escape the hungry robots by making them crash into each other. This code is available at https://nostarch.com/big-book-small-python-programming Tags: large, game"""import random, sys# Set up the constants: WIDTH = 40 # (!) Try changing this to 70 or 10. HEIGHT = 20 # (!) Try changing this to 10. NUM_ROBOTS = 10 # (!) Try changing this to 1 or 30. NUM_TELEPORTS = 2 # (!) Try changing this to 0 or 9999. NUM_DEAD_ROBOTS = 2 # (!) Try changing this to 0 or 20. NUM_WALLS = 100 # (!) Try changing this to 0 or 300.EMPTY_SPACE = ' ' # (!) Try changing this to '.'. PLAYER = '@' # (!) Try changing this to 'R'. ROBOT = 'R' # (!) Try changing this to '@'. DEAD_ROBOT = 'X' # (!) Try changing this to 'R'.# (!) Try changing this to '#' or 'O' or ' ': WALL = chr(9617) # Character 9617 is '?'def main():print('''Hungry Robots, by Al Sweigart email@protectedYou are trapped in a maze with hungry robots! You don't know why robots need to eat, but you don't want to find out. The robots are badly programmed and will move directly toward you, even if blocked by walls. You must trick the robots into crashing into each other (or dead robots) without being caught. You have a personal teleporter device, but it only has enough battery for {} trips. Keep in mind, you and robots can slip through the corners of two diagonal walls! '''.format(NUM_TELEPORTS))input('Press Enter to begin...')# Set up a new game:board = getNewBoard()robots = addRobots(board)playerPosition = getRandomEmptySpace(board, robots)while True: # Main game loop.displayBoard(board, robots, playerPosition)if len(robots) == 0: # Check if the player has won.print('All the robots have crashed into each other and you')print('lived to tell the tale! Good job!')sys.exit()# Move the player and robots:playerPosition = askForPlayerMove(board, robots, playerPosition)robots = moveRobots(board, robots, playerPosition)for x, y in robots: # Check if the player has lost.if (x, y) == playerPosition:displayBoard(board, robots, playerPosition)print('You have been caught by a robot!')sys.exit()def getNewBoard():"""Returns a dictionary that represents the board. The keys are(x, y) tuples of integer indexes for board positions, the values areWALL, EMPTY_SPACE, or DEAD_ROBOT. The dictionary also has the key'teleports' for the number of teleports the player has left.The living robots are stored separately from the board dictionary."""board = {'teleports': NUM_TELEPORTS}# Create an empty board:for x in range(WIDTH):for y in range(HEIGHT):board[(x, y)] = EMPTY_SPACE# Add walls on the edges of the board:for x in range(WIDTH):board[(x, 0)] = WALL # Make top wall.board[(x, HEIGHT - 1)] = WALL # Make bottom wall.for y in range(HEIGHT):board[(0, y)] = WALL # Make left wall.board[(WIDTH - 1, y)] = WALL # Make right wall.# Add the random walls:for i in range(NUM_WALLS):x, y = getRandomEmptySpace(board, [])board[(x, y)] = WALL# Add the starting dead robots:for i in range(NUM_DEAD_ROBOTS):x, y = getRandomEmptySpace(board, [])board[(x, y)] = DEAD_ROBOTreturn boarddef getRandomEmptySpace(board, robots):"""Return a (x, y) integer tuple of an empty space on the board."""while True:randomX = random.randint(1, WIDTH - 2)randomY = random.randint(1, HEIGHT - 2)if isEmpty(randomX, randomY, board, robots):breakreturn (randomX, randomY)def isEmpty(x, y, board, robots):"""Return True if the (x, y) is empty on the board and there's alsono robot there."""return board[(x, y)] == EMPTY_SPACE and (x, y) not in robotsdef addRobots(board):"""Add NUM_ROBOTS number of robots to empty spaces on the board andreturn a list of these (x, y) spaces where robots are now located."""robots = []for i in range(NUM_ROBOTS):x, y = getRandomEmptySpace(board, robots)robots.append((x, y))return robotsdef displayBoard(board, robots, playerPosition):"""Display the board, robots, and player on the screen."""# Loop over every space on the board:for y in range(HEIGHT):for x in range(WIDTH):# Draw the appropriate character:if board[(x, y)] == WALL:print(WALL, end='')elif board[(x, y)] == DEAD_ROBOT:print(DEAD_ROBOT, end='')elif (x, y) == playerPosition:print(PLAYER, end='')elif (x, y) in robots:print(ROBOT, end='')else:print(EMPTY_SPACE, end='')print() # Print a newline.def askForPlayerMove(board, robots, playerPosition):"""Returns the (x, y) integer tuple of the place the player movesnext, given their current location and the walls of the board."""playerX, playerY = playerPosition# Find which directions aren't blocked by a wall:q = 'Q' if isEmpty(playerX - 1, playerY - 1, board, robots) else ' 'w = 'W' if isEmpty(playerX + 0, playerY - 1, board, robots) else ' 'e = 'E' if isEmpty(playerX + 1, playerY - 1, board, robots) else ' 'd = 'D' if isEmpty(playerX + 1, playerY + 0, board, robots) else ' 'c = 'C' if isEmpty(playerX + 1, playerY + 1, board, robots) else ' 'x = 'X' if isEmpty(playerX + 0, playerY + 1, board, robots) else ' 'z = 'Z' if isEmpty(playerX - 1, playerY + 1, board, robots) else ' 'a = 'A' if isEmpty(playerX - 1, playerY + 0, board, robots) else ' 'allMoves = (q + w + e + d + c + x + a + z + 'S')while True:# Get player's move:print('(T)eleports remaining: {}'.format(board["teleports"]))print(' ({}) ({}) ({})'.format(q, w, e))print(' ({}) (S) ({})'.format(a, d))print('Enter move or QUIT: ({}) ({}) ({})'.format(z, x, c))move = input('> ').upper()if move == 'QUIT':print('Thanks for playing!')sys.exit()elif move == 'T' and board['teleports'] > 0:# Teleport the player to a random empty space:board['teleports'] -= 1return getRandomEmptySpace(board, robots)elif move != '' and move in allMoves:# Return the new player position based on their move:return {'Q': (playerX - 1, playerY - 1),'W': (playerX + 0, playerY - 1),'E': (playerX + 1, playerY - 1),'D': (playerX + 1, playerY + 0),'C': (playerX + 1, playerY + 1),'X': (playerX + 0, playerY + 1),'Z': (playerX - 1, playerY + 1),'A': (playerX - 1, playerY + 0),'S': (playerX, playerY)}[move]def moveRobots(board, robotPositions, playerPosition):"""Return a list of (x, y) tuples of new robot positions after theyhave tried to move toward the player."""playerx, playery = playerPositionnextRobotPositions = []while len(robotPositions) > 0:robotx, roboty = robotPositions[0]# Determine the direction the robot moves.if robotx < playerx:movex = 1 # Move right.elif robotx > playerx:movex = -1 # Move left.elif robotx == playerx:movex = 0 # Don't move horizontally.if roboty < playery:movey = 1 # Move up.elif roboty > playery:movey = -1 # Move down.elif roboty == playery:movey = 0 # Don't move vertically.# Check if the robot would run into a wall, and adjust course:if board[(robotx + movex, roboty + movey)] == WALL:# Robot would run into a wall, so come up with a new move:if board[(robotx + movex, roboty)] == EMPTY_SPACE:movey = 0 # Robot can't move horizontally.elif board[(robotx, roboty + movey)] == EMPTY_SPACE:movex = 0 # Robot can't move vertically.else:# Robot can't move.movex = 0movey = 0newRobotx = robotx + movexnewRoboty = roboty + moveyif (board[(robotx, roboty)] == DEAD_ROBOTor board[(newRobotx, newRoboty)] == DEAD_ROBOT):# Robot is at a crash site, remove it.del robotPositions[0]continue# Check if it moves into a robot, then destroy both robots:if (newRobotx, newRoboty) in nextRobotPositions:board[(newRobotx, newRoboty)] = DEAD_ROBOTnextRobotPositions.remove((newRobotx, newRoboty))else:nextRobotPositions.append((newRobotx, newRoboty))# Remove robots from robotPositions as they move.del robotPositions[0]return nextRobotPositions# If this program was run (instead of imported), run the game: if __name__ == '__main__':main()

    在輸入源代碼并運行幾次之后,嘗試對其進行實驗性的修改。標有(!)的注釋對你可以做的小改變有建議。你也可以自己想辦法做到以下幾點:

    • 創造兩種不同的機器人:只能沿對角線移動的機器人和只能沿基本方向移動的機器人。
    • 給玩家一定數量的陷阱,他們可以留下來阻止任何機器人踩到陷阱。
    • 給玩家有限數量的“瞬間墻”,他們可以建立自己的防御。

    探索程序

    試著找出下列問題的答案。嘗試對代碼進行一些修改,然后重新運行程序,看看這些修改有什么影響。

  • 如果把第 22 行的WALL = chr(9617)改成WALL = 'R'會怎么樣?
  • 如果把 237 行的return nextRobotPositions改成return robotPositions會怎么樣?
  • 如果刪除或注釋掉第 44 行的displayBoard(board, robots, playerPosition)會發生什么?
  • 如果刪除或注釋掉第 53 行的robots = moveRobots(board, robots, playerPosition)會發生什么?
  • 三十八、我控訴

    原文:http://inventwithpython.com/bigbookpython/project38.html

    你就是舉世聞名的大偵探瑪蒂爾德·加繆。貓佐菲不見了,你必須篩選線索。嫌疑人要么總是說謊,要么總是說真話。你會及時找到貓佐菲并指控有罪的一方嗎?

    在這個游戲中,你乘出租車到城市的不同地點。每個地方都有一個嫌疑犯和一件物品??梢韵蛳右扇嗽儐柶渌右扇撕臀锲返那闆r,將他們的回答與自己的探索筆記進行對比,確定他們是在說謊還是在說真話。有些人會知道誰綁架了佐菲(或者她在哪里,或者在綁架者的位置發現了什么物品),但是你必須確定你是否能相信他們。你有五分鐘時間找到罪犯,但是如果你三次指控錯誤,你就輸了。這款游戲的靈感來源于 Homestar Runner 的“雞蛋在哪里?”游戲。

    運行示例

    當您運行jaccuse.py時,輸出將如下所示:

    J'ACCUSE! (a mystery game) `--snip--` Time left: 5 min, 0 secYou are in your TAXI. Where do you want to go? (A)LBINO ALLIGATOR PIT (B)OWLING ALLEY (C)ITY HALL (D)UCK POND (H)IPSTER CAFE (O)LD BARN (U)NIVERSITY LIBRARY (V)IDEO GAME MUSEUM (Z)OO > aTime left: 4 min, 48 secYou are at the ALBINO ALLIGATOR PIT.ESPRESSA TOFFEEPOT with the ONE COWBOY BOOT is here.(J) "J'ACCUSE!" (3 accusations left) (Z) Ask if they know where ZOPHIE THE CAT is. (T) Go back to the TAXI. (1) Ask about ESPRESSA TOFFEEPOT (2) Ask about ONE COWBOY BOOT > zThey give you this clue: "DUKE HAUTDOG" Press Enter to continue... `--snip--`

    工作原理

    要完全理解這個程序,您應該密切關注clues字典,它位于第 51 行到第 109 行。您可以取消對第 151 到 154 行的注釋,以便在屏幕上顯示它。這個字典有來自SUSPECTS列表的字符串作為鍵,有“線索字典”作為值。每個線索字典都包含來自SUSPECTS和ITEMS的字符串。當被問及另一個嫌疑人或物品時,最初的嫌疑人會用這些字符串回答。例如,如果clues['DUKE HAUTDOG']['CANDLESTICK']設定為'DUCK POND',那么當玩家向杜克·豪特多格詢問燭臺時,他們會說它在鴨塘。每次玩游戲時,嫌疑人、物品、地點和罪犯都會被洗牌。

    這個程序的代碼圍繞著這個數據結構,所以理解它對于理解程序的其余部分是必要的。

    """J'ACCUSE!, by Al Sweigart email@protected A mystery game of intrigue and a missing cat. This code is available at https://nostarch.com/big-book-small-python-programming Tags: extra-large, game, humor, puzzle"""# Play the original Flash game at: # https://homestarrunner.com/videlectrix/wheresanegg.html # More info at: http://www.hrwiki.org/wiki/Where's_an_Egg%3Fimport time, random, sys# Set up the constants: SUSPECTS = ['DUKE HAUTDOG', 'MAXIMUM POWERS', 'BILL MONOPOLIS', 'SENATOR SCHMEAR', 'MRS. FEATHERTOSS', 'DR. JEAN SPLICER', 'RAFFLES THE CLOWN', 'ESPRESSA TOFFEEPOT', 'CECIL EDGAR VANDERTON'] ITEMS = ['FLASHLIGHT', 'CANDLESTICK', 'RAINBOW FLAG', 'HAMSTER WHEEL', 'ANIME VHS TAPE', 'JAR OF PICKLES', 'ONE COWBOY BOOT', 'CLEAN UNDERPANTS', '5 DOLLAR GIFT CARD'] PLACES = ['ZOO', 'OLD BARN', 'DUCK POND', 'CITY HALL', 'HIPSTER CAFE', 'BOWLING ALLEY', 'VIDEO GAME MUSEUM', 'UNIVERSITY LIBRARY', 'ALBINO ALLIGATOR PIT'] TIME_TO_SOLVE = 300 # 300 seconds (5 minutes) to solve the game.# First letters and longest length of places are needed for menu display: PLACE_FIRST_LETTERS = {} LONGEST_PLACE_NAME_LENGTH = 0 for place in PLACES:PLACE_FIRST_LETTERS[place[0]] = placeif len(place) > LONGEST_PLACE_NAME_LENGTH:LONGEST_PLACE_NAME_LENGTH = len(place)# Basic sanity checks of the constants: assert len(SUSPECTS) == 9 assert len(ITEMS) == 9 assert len(PLACES) == 9 # First letters must be unique: assert len(PLACE_FIRST_LETTERS.keys()) == len(PLACES)knownSuspectsAndItems = [] # visitedPlaces: Keys=places, values=strings of the suspect & item there. visitedPlaces = {} currentLocation = 'TAXI' # Start the game at the taxi. accusedSuspects = [] # Accused suspects won't offer clues. liars = random.sample(SUSPECTS, random.randint(3, 4)) accusationsLeft = 3 # You can accuse up to 3 people. culprit = random.choice(SUSPECTS)# Common indexes link these; e.g. SUSPECTS[0] and ITEMS[0] are at PLACES[0]. random.shuffle(SUSPECTS) random.shuffle(ITEMS) random.shuffle(PLACES)# Create data structures for clues the truth-tellers give about each # item and suspect. # clues: Keys=suspects being asked for a clue, value="clue dictionary". clues = {} for i, interviewee in enumerate(SUSPECTS):if interviewee in liars:continue # Skip the liars for now.# This "clue dictionary" has keys=items & suspects,# value=the clue given.clues[interviewee] = {}clues[interviewee]['debug_liar'] = False # Useful for debugging.for item in ITEMS: # Select clue about each item.if random.randint(0, 1) == 0: # Tells where the item is:clues[interviewee][item] = PLACES[ITEMS.index(item)]else: # Tells who has the item:clues[interviewee][item] = SUSPECTS[ITEMS.index(item)]for suspect in SUSPECTS: # Select clue about each suspect.if random.randint(0, 1) == 0: # Tells where the suspect is:clues[interviewee][suspect] = PLACES[SUSPECTS.index(suspect)]else: # Tells what item the suspect has:clues[interviewee][suspect] = ITEMS[SUSPECTS.index(suspect)]# Create data structures for clues the liars give about each item # and suspect: for i, interviewee in enumerate(SUSPECTS):if interviewee not in liars:continue # We've already handled the truth-tellers.# This "clue dictionary" has keys=items & suspects,# value=the clue given:clues[interviewee] = {}clues[interviewee]['debug_liar'] = True # Useful for debugging.# This interviewee is a liar and gives wrong clues:for item in ITEMS:if random.randint(0, 1) == 0:while True: # Select a random (wrong) place clue.# Lies about where the item is.clues[interviewee][item] = random.choice(PLACES)if clues[interviewee][item] != PLACES[ITEMS.index(item)]:# Break out of the loop when wrong clue is selected.breakelse:while True: # Select a random (wrong) suspect clue.clues[interviewee][item] = random.choice(SUSPECTS)if clues[interviewee][item] != SUSPECTS[ITEMS.index(item)]:# Break out of the loop when wrong clue is selected.breakfor suspect in SUSPECTS:if random.randint(0, 1) == 0:while True: # Select a random (wrong) place clue.clues[interviewee][suspect] = random.choice(PLACES)if clues[interviewee][suspect] != PLACES[ITEMS.index(item)]:# Break out of the loop when wrong clue is selected.breakelse:while True: # Select a random (wrong) item clue.clues[interviewee][suspect] = random.choice(ITEMS)if clues[interviewee][suspect] != ITEMS[SUSPECTS.index(suspect)]:# Break out of the loop when wrong clue is selected.break# Create the data structures for clues given when asked about Zophie: zophieClues = {} for interviewee in random.sample(SUSPECTS, random.randint(3, 4)):kindOfClue = random.randint(1, 3)if kindOfClue == 1:if interviewee not in liars:# They tell you who has Zophie.zophieClues[interviewee] = culpritelif interviewee in liars:while True:# Select a (wrong) suspect clue.zophieClues[interviewee] = random.choice(SUSPECTS)if zophieClues[interviewee] != culprit:# Break out of the loop when wrong clue is selected.breakelif kindOfClue == 2:if interviewee not in liars:# They tell you where Zophie is.zophieClues[interviewee] = PLACES[SUSPECTS.index(culprit)]elif interviewee in liars:while True:# Select a (wrong) place clue.zophieClues[interviewee] = random.choice(PLACES)if zophieClues[interviewee] != PLACES[SUSPECTS.index(culprit)]:# Break out of the loop when wrong clue is selected.breakelif kindOfClue == 3:if interviewee not in liars:# They tell you what item Zophie is near.zophieClues[interviewee] = ITEMS[SUSPECTS.index(culprit)]elif interviewee in liars:while True:# Select a (wrong) item clue.zophieClues[interviewee] = random.choice(ITEMS)if zophieClues[interviewee] != ITEMS[SUSPECTS.index(culprit)]:# Break out of the loop when wrong clue is selected.break# EXPERIMENT: Uncomment this code to view the clue data structures: #import pprint #pprint.pprint(clues) #pprint.pprint(zophieClues) #print('culprit =', culprit)# START OF THE GAME print("""J'ACCUSE! (a mystery game)") By Al Sweigart email@protected Inspired by Homestar Runner\'s "Where\'s an Egg?" gameYou are the world-famous detective, Mathilde Camus. ZOPHIE THE CAT has gone missing, and you must sift through the clues. Suspects either always tell lies, or always tell the truth. Ask them about other people, places, and items to see if the details they give are truthful and consistent with your observations. Then you will know if their clue about ZOPHIE THE CAT is true or not. Will you find ZOPHIE THE CAT in time and accuse the guilty party? """) input('Press Enter to begin...')startTime = time.time() endTime = startTime + TIME_TO_SOLVEwhile True: # Main game loop.if time.time() > endTime or accusationsLeft == 0:# Handle "game over" condition:if time.time() > endTime:print('You have run out of time!')elif accusationsLeft == 0:print('You have accused too many innocent people!')culpritIndex = SUSPECTS.index(culprit)print('It was {} at the {} with the {} who catnapped her!'.format(culprit, PLACES[culpritIndex], ITEMS[culpritIndex]))print('Better luck next time, Detective.')sys.exit()print()minutesLeft = int(endTime - time.time()) // 60secondsLeft = int(endTime - time.time()) % 60print('Time left: {} min, {} sec'.format(minutesLeft, secondsLeft))if currentLocation == 'TAXI':print(' You are in your TAXI. Where do you want to go?')for place in sorted(PLACES):placeInfo = ''if place in visitedPlaces:placeInfo = visitedPlaces[place]nameLabel = '(' + place[0] + ')' + place[1:]spacing = " " * (LONGEST_PLACE_NAME_LENGTH - len(place))print('{} {}{}'.format(nameLabel, spacing, placeInfo))print('(Q)UIT GAME')while True: # Keep asking until a valid response is given.response = input('> ').upper()if response == '':continue # Ask again.if response == 'Q':print('Thanks for playing!')sys.exit()if response in PLACE_FIRST_LETTERS.keys():breakcurrentLocation = PLACE_FIRST_LETTERS[response]continue # Go back to the start of the main game loop.# At a place; player can ask for clues.print(' You are at the {}.'.format(currentLocation))currentLocationIndex = PLACES.index(currentLocation)thePersonHere = SUSPECTS[currentLocationIndex]theItemHere = ITEMS[currentLocationIndex]print(' {} with the {} is here.'.format(thePersonHere, theItemHere))# Add the suspect and item at this place to our list of known# suspects and items:if thePersonHere not in knownSuspectsAndItems:knownSuspectsAndItems.append(thePersonHere)if ITEMS[currentLocationIndex] not in knownSuspectsAndItems:knownSuspectsAndItems.append(ITEMS[currentLocationIndex])if currentLocation not in visitedPlaces.keys():visitedPlaces[currentLocation] = '({}, {})'.format(thePersonHere.lower(), theItemHere.lower())# If the player has accused this person wrongly before, they# won't give clues:if thePersonHere in accusedSuspects:print('They are offended that you accused them,')print('and will not help with your investigation.')print('You go back to your TAXI.')print()input('Press Enter to continue...')currentLocation = 'TAXI'continue # Go back to the start of the main game loop.# Display menu of known suspects & items to ask about:print()print('(J) "J\'ACCUSE!" ({} accusations left)'.format(accusationsLeft))print('(Z) Ask if they know where ZOPHIE THE CAT is.')print('(T) Go back to the TAXI.')for i, suspectOrItem in enumerate(knownSuspectsAndItems):print('({}) Ask about {}'.format(i + 1, suspectOrItem))while True: # Keep asking until a valid response is given.response = input('> ').upper()if response in 'JZT' or (response.isdecimal() and 0 < int(response) <= len(knownSuspectsAndItems)):breakif response == 'J': # Player accuses this suspect.accusationsLeft -= 1 # Use up an accusation.if thePersonHere == culprit:# You've accused the correct suspect.print('You\'ve cracked the case, Detective!')print('It was {} who had catnapped ZOPHIE THE CAT.'.format(culprit))minutesTaken = int(time.time() - startTime) // 60secondsTaken = int(time.time() - startTime) % 60print('Good job! You solved it in {} min, {} sec.'.format(minutesTaken, secondsTaken))sys.exit()else:# You've accused the wrong suspect.accusedSuspects.append(thePersonHere)print('You have accused the wrong person, Detective!')print('They will not help you with anymore clues.')print('You go back to your TAXI.')currentLocation = 'TAXI'elif response == 'Z': # Player asks about Zophie.if thePersonHere not in zophieClues:print('"I don\'t know anything about ZOPHIE THE CAT."')elif thePersonHere in zophieClues:print(' They give you this clue: "{}"'.format(zophieClues[thePersonHere]))# Add non-place clues to the list of known things:if zophieClues[thePersonHere] not in knownSuspectsAndItems and zophieClues[thePersonHere] not in PLACES:knownSuspectsAndItems.append(zophieClues[thePersonHere])elif response == 'T': # Player goes back to the taxi.currentLocation = 'TAXI'continue # Go back to the start of the main game loop.else: # Player asks about a suspect or item.thingBeingAskedAbout = knownSuspectsAndItems[int(response) - 1]if thingBeingAskedAbout in (thePersonHere, theItemHere):print(' They give you this clue: "No comment."')else:print(' They give you this clue: "{}"'.format(clues[thePersonHere][thingBeingAskedAbout]))# Add non-place clues to the list of known things:if clues[thePersonHere][thingBeingAskedAbout] not in knownSuspectsAndItems and clues[thePersonHere][thingBeingAskedAbout] not in PLACES:knownSuspectsAndItems.append(clues[thePersonHere][thingBeingAskedAbout])input('Press Enter to continue...')

    探索程序

    試著找出下列問題的答案。嘗試對代碼進行一些修改,然后重新運行程序,看看這些修改有什么影響。

  • 如果把第 16 行的TIME_TO_SOLVE = 300改成TIME_TO_SOLVE = 0會怎么樣?
  • 如果把 176 行的time.time() > endTime or accusationsLeft == 0改成time.time() > endTime and accusationsLeft == 0會怎么樣?
  • 如果把 198 行的place[1:]改成place會怎么樣?
  • 如果把 173 行的startTime + TIME_TO_SOLVE改成startTime * TIME_TO_SOLVE會怎么樣?
  • 三十九、蘭頓的螞蟻

    原文:http://inventwithpython.com/bigbookpython/project39.html

    蘭頓的螞蟻是二維網格上的元胞自動機模擬,類似于項目 13“康威的生命游戲”。在模擬中,一只“螞蟻”從兩種顏色之一的正方形開始。如果空間是第一種顏色,螞蟻將它切換到第二種顏色,向右旋轉 90 度,并向前移動一個空間。如果空間是第二種顏色,螞蟻將它切換到第一種顏色,向左旋轉 90 度,并向前移動一個空間。盡管規則非常簡單,但模擬顯示了復雜的突發行為。模擬可以在同一個空間中展示多只螞蟻,當它們彼此相遇時,會產生有趣的互動。蘭頓的螞蟻是計算機科學家克里斯·蘭頓在 1986 年發明的。更多關于蘭頓螞蟻的信息可以在en.wikipedia.org/wiki/Langton%27s_ant找到。

    運行示例

    圖 39-1 顯示了運行langtonsant.py時的輸出。

    :蘭頓螞蟻細胞自動機的催眠輸出

    工作原理

    這個程序使用了兩種“方向”的含義一方面,代表每只螞蟻的字典存儲了基本方向:北、南、東、西。然而,向左或向右(或逆時針和順時針,因為我們是從上面看螞蟻)是一個旋轉方向。螞蟻應該根據它們所站的瓷磚向左轉或向右轉,所以第 78 到 100 行根據螞蟻當前的基本方向和它們轉向的方向設置了一個新的基本方向。

    """Langton's Ant, by Al Sweigart email@protected A cellular automata animation. Press Ctrl-C to stop. More info: https://en.wikipedia.org/wiki/Langton%27s_ant This code is available at https://nostarch.com/big-book-small-python-programming Tags: large, artistic, bext, simulation"""import copy, random, sys, timetry:import bext except ImportError:print('This program requires the bext module, which you')print('can install by following the instructions at')print('https://pypi.org/project/Bext/')sys.exit()# Set up the constants: WIDTH, HEIGHT = bext.size() # We can't print to the last column on Windows without it adding a # newline automatically, so reduce the width by one: WIDTH -= 1 HEIGHT -= 1 # Adjustment for the quit message at the bottom.NUMBER_OF_ANTS = 10 # (!) Try changing this to 1 or 50. PAUSE_AMOUNT = 0.1 # (!) Try changing this to 1.0 or 0.0.# (!) Try changing these to make the ants look different: ANT_UP = '^' ANT_DOWN = 'v' ANT_LEFT = '<' ANT_RIGHT = '>'# (!) Try changing these colors to one of 'black', 'red', 'green', # 'yellow', 'blue', 'purple', 'cyan', or 'white'. (These are the only # colors that the bext module supports.) ANT_COLOR = 'red' BLACK_TILE = 'black' WHITE_TILE = 'white'NORTH = 'north' SOUTH = 'south' EAST = 'east' WEST = 'west'def main():bext.fg(ANT_COLOR) # The ants' color is the foreground color.bext.bg(WHITE_TILE) # Set the background to white to start.bext.clear()# Create a new board data structure:board = {'width': WIDTH, 'height': HEIGHT}# Create ant data structures:ants = []for i in range(NUMBER_OF_ANTS):ant = {'x': random.randint(0, WIDTH - 1),'y': random.randint(0, HEIGHT - 1),'direction': random.choice([NORTH, SOUTH, EAST, WEST]),}ants.append(ant)# Keep track of which tiles have changed and need to be redrawn on# the screen:changedTiles = []while True: # Main program loop.displayBoard(board, ants, changedTiles)changedTiles = []# nextBoard is what the board will look like on the next step in# the simulation. Start with a copy of the current step's board:nextBoard = copy.copy(board)# Run a single simulation step for each ant:for ant in ants:if board.get((ant['x'], ant['y']), False) == True:nextBoard[(ant['x'], ant['y'])] = False# Turn clockwise:if ant['direction'] == NORTH:ant['direction'] = EASTelif ant['direction'] == EAST:ant['direction'] = SOUTHelif ant['direction'] == SOUTH:ant['direction'] = WESTelif ant['direction'] == WEST:ant['direction'] = NORTHelse:nextBoard[(ant['x'], ant['y'])] = True# Turn counter clockwise:if ant['direction'] == NORTH:ant['direction'] = WESTelif ant['direction'] == WEST:ant['direction'] = SOUTHelif ant['direction'] == SOUTH:ant['direction'] = EASTelif ant['direction'] == EAST:ant['direction'] = NORTHchangedTiles.append((ant['x'], ant['y']))# Move the ant forward in whatever direction it's facing:if ant['direction'] == NORTH:ant['y'] -= 1if ant['direction'] == SOUTH:ant['y'] += 1if ant['direction'] == WEST:ant['x'] -= 1if ant['direction'] == EAST:ant['x'] += 1# If the ant goes past the edge of the screen,# it should wrap around to other side.ant['x'] = ant['x'] % WIDTHant['y'] = ant['y'] % HEIGHTchangedTiles.append((ant['x'], ant['y']))board = nextBoarddef displayBoard(board, ants, changedTiles):"""Displays the board and ants on the screen. The changedTilesargument is a list of (x, y) tuples for tiles on the screen thathave changed and need to be redrawn."""# Draw the board data structure:for x, y in changedTiles:bext.goto(x, y)if board.get((x, y), False):bext.bg(BLACK_TILE)else:bext.bg(WHITE_TILE)antIsHere = Falsefor ant in ants:if (x, y) == (ant['x'], ant['y']):antIsHere = Trueif ant['direction'] == NORTH:print(ANT_UP, end='')elif ant['direction'] == SOUTH:print(ANT_DOWN, end='')elif ant['direction'] == EAST:print(ANT_LEFT, end='')elif ant['direction'] == WEST:print(ANT_RIGHT, end='')breakif not antIsHere:print(' ', end='')# Display the quit message at the bottom of the screen:bext.goto(0, HEIGHT)bext.bg(WHITE_TILE)print('Press Ctrl-C to quit.', end='')sys.stdout.flush() # (Required for bext-using programs.)time.sleep(PAUSE_AMOUNT)# If this program was run (instead of imported), run the game: if __name__ == '__main__':try:main()except KeyboardInterrupt:print("Langton's Ant, by Al Sweigart email@protected")sys.exit() # When Ctrl-C is pressed, end the program.

    在輸入源代碼并運行幾次之后,嘗試對其進行實驗性的修改。標有(!)的注釋對你可以做的小改變有建議。你也可以自己想辦法做到以下幾點:

    • 讓玩家從文本文件中加載并保存棋盤的狀態。
    • 使用新的移動規則創建額外的平鋪狀態,看看會出現什么行為。
    • 為蘭頓的螞蟻實現維基百科文章中建議的一些想法。

    探索程序

    試著找出下列問題的答案。嘗試對代碼進行一些修改,然后重新運行程序,看看這些修改有什么影響。

  • 如果把 149 行的print(' ', end='')改成print('.', end='')會怎么樣?
  • 如果把 106 行的ant['y'] += 1改成ant['y'] -= 1會怎么樣?
  • 如果把第 79 行的nextBoard[(ant['x'], ant['y'])] = False改成nextBoard[(ant['x'], ant['y'])] = True會怎么樣?
  • 如果把第 21 行的WIDTH -= 1改成WIDTH -= 40會怎么樣?
  • 如果把 119 行的board = nextBoard改成board = board會怎么樣?
  • 四十、黑客語

    原文:http://inventwithpython.com/bigbookpython/project40.html

    沒有比用數字替換文本中的字母更好的方法來展示您瘋狂的黑客技能了:m4d h4x0r 5k1llz!!!這個單詞程序自動將普通英語轉換成黑客語,這是最酷的在線交談方式?;蛘咧辽偈窃?1993 年。

    這需要一段時間來適應,但經過一些練習,你最終會流利地閱讀黑客語。比如1t email@protected]<3s 4 w|-|1le +o g37 |_|s3|) 70, b|_|+ y0u (an 3\/3nt|_|/-\lly r3a|) l33t$peak phl|_|3n+ly。黑客語可能一開始很難讀懂,但程序本身很簡單,對初學者來說很好。更多關于黑客語的信息可以在en.wikipedia.org/wiki/Leet找到。

    運行示例

    當您運行leetspeak.py時,輸出將如下所示:

    L3375P34]< (leetspeek) By Al Sweigart email@protectedEnter your leet message: > I am a leet hacker. Fear my mad skills. The 90s were over two decades ago.! @m a l33t email@protected(]<er. email@protected my m4|) $k|ll$. +h3 90s w3r3 0ver tw0 d3(ad3$ 4g0. (Copied leetspeak to clipboard.)

    工作原理

    第 36 行的charMapping變量中的字典將普通英語字符映射到黑客語字符。然而,由于可能有多個可能的黑客語字符(例如字母't'的'7'或'+'),charMapping字典中的每個值都是一個字符串列表。當創建新的黑客語字符串時,程序有 30%的機會簡單地使用原始英文消息中的字符,有 70%的機會使用黑客語字符之一。這意味著同一個英語信息有多種可能的翻譯。

    """Leetspeak, by Al Sweigart email@protected Translates English messages into l33t5p34]<. This code is available at https://nostarch.com/big-book-small-python-programming Tags: tiny, beginner, word"""import randomtry:import pyperclip # pyperclip copies text to the clipboard. except ImportError:pass # If pyperclip is not installed, do nothing. It's no big deal.def main():print('''L3375P34]< (leetspeek) By Al Sweigart email@protectedEnter your leet message:''')english = input('> ')print()leetspeak = englishToLeetspeak(english)print(leetspeak)try:# Trying to use pyperclip will raise a NameError exception if# it wasn't imported:pyperclip.copy(leetspeak)print('(Copied leetspeak to clipboard.)')except NameError:pass # Do nothing if pyperclip wasn't installed.def englishToLeetspeak(message):"""Convert the English string in message and return leetspeak."""# Make sure all the keys in `charMapping` are lowercase.charMapping = {'a': ['4', '@', '/-\\'], 'c': ['('], 'd': ['|)'], 'e': ['3'],'f': ['ph'], 'h': [']-[', '|-|'], 'i': ['1', '!', '|'], 'k': [']<'],'o': ['0'], 's': ['$', '5'], 't': ['7', '+'], 'u': ['|_|'],'v': ['\\/']}leetspeak = ''for char in message: # Check each character:# There is a 70% chance we change the character to leetspeak.if char.lower() in charMapping and random.random() <= 0.70:possibleLeetReplacements = charMapping[char.lower()]leetReplacement = random.choice(possibleLeetReplacements)leetspeak = leetspeak + leetReplacementelse:# Don't translate this character:leetspeak = leetspeak + charreturn leetspeak# If this program was run (instead of imported), run the game: if __name__ == '__main__':main()

    在輸入源代碼并運行幾次之后,嘗試對其進行實驗性的修改。你也可以自己想辦法做到以下幾點:

    • 修改charMapping字典,使其支持新的黑客語字符。
    • 添加一個功能,可以將黑客語轉換回簡單的英語。

    探索程序

    試著找出下列問題的答案。嘗試對代碼進行一些修改,然后重新運行程序,看看這些修改有什么影響。

  • 如果把 51 行的return leetspeak改成return message會怎么樣?
  • 如果把第 44 行的char.lower()改成char會怎么樣?
  • 如果把第 44 行的char.lower()改成char.upper()會怎么樣?
  • 如果把第 47 行的leetspeak = leetspeak + leetReplacement改成leetspeak = leetReplacement會怎么樣?
  • 總結

    以上是生活随笔為你收集整理的Python 小型项目大全 36~40的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    91视频在线观看免费 | 欧美成人精品三级在线观看播放 | 在线免费高清视频 | 日韩高清在线一区二区三区 | 久久国产精品成人免费浪潮 | 伊人伊成久久人综合网站 | 亚洲欧美国产精品久久久久 | 婷婷久久久久 | 久久黄色免费 | 国产日韩在线播放 | 国产精品午夜免费福利视频 | 亚洲精品视频在线观看免费视频 | 日韩欧美电影在线 | 亚洲a成人v | 亚洲精品国偷拍自产在线观看蜜桃 | 久草爱视频 | 国产精品久久久久av福利动漫 | 久久综合色天天久久综合图片 | 亚洲精品2区 | 亚洲日本成人网 | 在线观看蜜桃视频 | 国产视频每日更新 | 日韩一区二区三区高清免费看看 | 日韩精品在线视频免费观看 | 看毛片网站 | 黄色成人av在线 | 欧美一级特黄aaaaaa大片在线观看 | 国产系列 在线观看 | 婷婷丁香激情 | 国产精品久久久久久久久久久久冷 | 人成电影网 | 亚洲粉嫩av| 美女国产 | 亚洲黄色小说网 | 在线观看亚洲精品视频 | 欧美视频xxx| 91麻豆精品国产91久久久使用方法 | 国产99免费| 午夜美女wwww | 国产亚洲精品综合一区91 | 97av视频 | www.国产精品 | 中文字幕国产精品一区二区 | 97国产在线 | 伊甸园av在线 | 我要色综合天天 | 亚洲精品美女久久 | 成人国产在线 | 97视频在线播放 | 久久有精品 | 婷婷深爱激情 | 亚洲国产小视频在线观看 | 婷婷伊人综合亚洲综合网 | 国模一二三区 | 日韩精品视频免费看 | 亚洲免费成人av电影 | 日韩在线短视频 | 五月婷婷视频在线 | 日韩视频一区二区在线 | 日韩av中文字幕在线 | 超碰成人网 | 日韩视频1 | 国产精品99久久久精品免费观看 | 日韩精品一卡 | 国产五十路毛片 | 91av在线免费播放 | 97福利在线观看 | 天堂资源在线观看视频 | 国产视频在线观看一区 | 天天爱天天操 | 五月婷婷中文字幕 | 国产美女视频免费 | 日韩久久精品 | 四虎影视成人永久免费观看亚洲欧美 | 久久综合亚洲鲁鲁五月久久 | 精品天堂av | 亚洲精品久久久久999中文字幕 | 国产在线观看你懂得 | www178ccom视频在线 | a级国产乱理论片在线观看 特级毛片在线观看 | 国产一区欧美日韩 | 成人av午夜 | 九九精品视频在线观看 | www.xxxx欧美 | 天天色播 | 高清av免费一区中文字幕 | 91夫妻自拍 | 91自拍成人| 91亚洲免费 | 国产99久久久精品 | 9在线观看免费 | 欧美天天干 | 极品嫩模被强到高潮呻吟91 | 狠狠操欧美| 国产在线观看中文字幕 | 成人一级电影在线观看 | 国产精品不卡在线播放 | 美女国内精品自产拍在线播放 | 青青久草在线 | 精品国产91亚洲一区二区三区www | 青青河边草免费观看完整版高清 | 成人a视频片观看免费 | 亚洲精品视频第一页 | 中文字幕第一页av | 久久久久视 | 国产美女免费看 | 在线 欧美 日韩 | 日韩电影一区二区在线观看 | 五月天久久久久久 | 久久免费电影 | 99精品视频在线免费观看 | 在线免费看黄网站 | 免费能看的黄色片 | 国产精品欧美激情在线观看 | 91完整版在线观看 | 久久99久久99精品免视看婷婷 | 国产日韩欧美在线观看视频 | 亚洲 综合 激情 | 国产免费看| 久久99网| 成人在线一区二区 | 色婷婷综合五月 | 国产精品美女999 | av不卡中文字幕 | 91成人网在线播放 | 国产午夜三级一区二区三 | 黄色一级动作片 | 精品免费视频. | 五月天综合色 | 91少妇精拍在线播放 | 亚洲永久字幕 | 国产96在线 | 91超在线| 欧美色图亚洲图片 | 亚洲色图 校园春色 | 99视频国产精品免费观看 | 久久只有精品 | 免费看一级黄色 | 久久高清 | 美女福利视频一区二区 | 国产一区二区三区高清播放 | 日韩中文在线字幕 | 在线看岛国av | 久久精品www人人爽人人 | 国产99久久久久久免费看 | 久久人人爽爽 | 亚洲专区中文字幕 | 久久精品影视 | 国产精品99久久久久久久久久久久 | 在线免费av网站 | 国内精自线一二区永久 | 久久久久久久久久久网 | ,午夜性刺激免费看视频 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 亚洲va欧洲va国产va不卡 | 亚洲视频 视频在线 | 欧美极度另类性三渗透 | 亚州黄色一级 | 日本三级国产 | 国产一级视频在线观看 | 在线天堂中文在线资源网 | 深爱婷婷网 | 片网址 | 日韩精品视频在线免费观看 | 国产在线精品播放 | 免费在线看v | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 怡红院av| 国产涩涩在线观看 | 午夜精品久久久 | 亚洲激精日韩激精欧美精品 | 91久久精品日日躁夜夜躁国产 | 国产精品精品久久久久久 | 在线一级片| 日韩免费在线看 | 国产一级免费观看视频 | 婷婷六月综合网 | 99久久精品国产网站 | 亚洲激情五月 | 99久久99视频只有精品 | 国产特级毛片aaaaaa毛片 | 国产视频2区 | 欧美日韩视频在线播放 | 国产成人av福利 | 国产精品一区二区免费视频 | 亚洲成a人片77777潘金莲 | 国产精品6 | av官网 | 国产亚洲情侣一区二区无 | 99综合电影在线视频 | 伊人网综合在线观看 | 黄污网站在线 | www.香蕉视频在线观看 | 成人在线一区二区三区 | 欧美精品网站 | 久久夜夜操 | 久久精品这里都是精品 | 亚洲女人天堂成人av在线 | 在线色亚洲 | 久久精品在线 | 中日韩三级视频 | 狠狠狠色丁香综合久久天下网 | 日韩va亚洲va欧美va久久 | 免费av网站观看 | 在线观看日韩专区 | 天天操夜夜操 | 天天操天天干天天操天天干 | 欧美资源在线观看 | 精品久久一区二区 | 天天天综合网 | 天天操天天射天天插 | 久久久久久久久久久久久影院 | 亚洲精品国产视频 | 五月综合网站 | 国产午夜在线 | 天天综合网在线 | 97热久久免费频精品99 | 国产精品免费大片视频 | 久久精品国产一区二区电影 | 中文字幕免费一区 | 天天综合网入口 | .国产精品成人自产拍在线观看6 | av经典在线| 中文字幕在线一区二区三区 | 免费看v片| 在线观看mv的中文字幕网站 | 日本夜夜草视频网站 | 久久久五月天 | 亚洲春色成人 | 国产精品91一区 | 99热这里只有精品8 久久综合毛片 | 精品久久久精品 | 一本一本久久a久久精品牛牛影视 | 精品天堂av | 日韩激情中文字幕 | 四虎影视精品 | 欧美一级性生活视频 | 日韩欧美网站 | 天天天天天天干 | 亚洲激情影院 | 日日干 天天干 | 黄色日本免费 | 在线观看 亚洲 | 最近中文字幕免费视频 | 丁香五月缴情综合网 | 精品国内自产拍在线观看视频 | 天天射射天天 | 91cn国产在线 | www.天天操.com | 成人中文字幕在线 | 日本最新中文字幕 | 一区二区av | 国产精品久久久久久久午夜 | 99免费精品视频 | 操操碰| 1000部国产精品成人观看 | 99精品乱码国产在线观看 | 涩五月婷婷 | 美女国产 | 国产精品久久久久久久久久了 | 9999毛片 | 天天色天天艹 | 日日干av| 国内精品久久久久影院一蜜桃 | 日韩区欠美精品av视频 | 久久综合久久综合这里只有精品 | 97成人精品区在线播放 | 四虎影视成人精品国库在线观看 | av电影免费在线播放 | 久久无码av一区二区三区电影网 | 在线免费试看 | 免费精品| 在线播放91 | 99久热精品 | 深夜免费福利 | 国产日韩欧美在线影视 | 在线三级中文 | 天天搞天天干天天色 | 国产精品一区二区av影院萌芽 | 在线天堂8√ | 中文字幕av在线不卡 | 天天操天天草 | 天天色影院 | 天天天天爽 | 在线影视 一区 二区 三区 | 色婷婷成人网 | 欧美色综合久久 | 国产精品久久久一区二区三区网站 | 中文视频一区二区 | 久久色亚洲 | 精品久久久久久国产 | 天天射天天色天天干 | 日夜夜精品视频 | 日韩精品一卡 | av在观看 | 色婷婷电影 | 狠狠88综合久久久久综合网 | 99久久9| 奇米影视8888| 精品久久久久久久久久国产 | 日本爱爱免费 | 日韩免费一级a毛片在线播放一级 | 国产日韩视频在线观看 | 99国产成+人+综合+亚洲 欧美 | 国产女人免费看a级丨片 | 在线观看视频福利 | 日韩av一区在线观看 | 国产成人亚洲精品自产在线 | 超碰99在线| 成人免费视频播放 | 国产精品美女久久久久久 | 日韩二区在线播放 | 91av视频导航 | 四虎影视精品永久在线观看 | 五月天电影免费在线观看一区 | 日韩特黄av | 亚洲成人网在线 | 外国av网 | 五月天婷婷视频 | 午夜91视频 | 国产精品免费视频网站 | 一区二区三区手机在线观看 | 日本最新一区二区三区 | 91在线91| 亚洲免费av在线播放 | 亚洲成人家庭影院 | 国产毛片久久 | 日日摸日日爽 | 精品在线观看一区二区 | 国产aa精品 | 美女福利视频网 | 日韩成人中文字幕 | 99综合电影在线视频 | 久久精品视频中文字幕 | 欧美激情精品久久久 | 久草视频一区 | 国产成人免费在线观看 | 欧美一级久久久久 | 亚洲精品免费视频 | 午夜视频免费在线观看 | 黄色的视频 | 久久在线精品 | 99免费看片 | 亚洲 欧洲 国产 精品 | 欧美精品一区二区蜜臀亚洲 | 国产精品18久久久久白浆 | 狠狠亚洲 | 国产99久久久欧美黑人 | 日韩欧美精选 | 日韩精品久久久免费观看夜色 | 91精品一区二区三区久久久久久 | 成人一区在线观看 | 天天操天天舔天天爽 | 欧美黄在线 | 成人av亚洲 | 99超碰在线观看 | 免费成人黄色片 | 久草在线观 | 一区在线电影 | 精品久久久久久久久久国产 | 久久视屏网 | 毛片的网址 | 国产成人精品亚洲精品 | www.狠狠操 | 中文字幕你懂的 | 在线观看中文字幕dvd播放 | 国产精品免费成人 | 国产精品高潮呻吟久久久久 | 日韩中文字幕国产 | 久久精品一区二区三区中文字幕 | 日韩精品免费在线视频 | 91九色蝌蚪视频网站 | 日韩三级成人 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 丰满少妇高潮在线观看 | 91av蜜桃| 色av色av色av| 亚洲免费在线视频 | 国产婷婷 | 97超级碰碰碰视频在线观看 | 一区二区电影在线观看 | 久久免费视频这里只有精品 | 青青河边草观看完整版高清 | 中文字幕在线一二 | 免费成人在线网站 | 一区二区三区四区久久 | 日日夜日日干 | 午夜国产在线观看 | 一区 二区 精品 | 天天射天天射 | 黄色国产区 | 国产精品一区二区三区免费看 | 日韩欧美在线中文字幕 | 精品伦理一区二区三区 | 99热播精品 | av色综合网 | 一本一本久久a久久精品综合 | 中文av影院 | 亚洲天堂精品视频在线观看 | 激情av网址 | japanesefreesexvideo高潮| 精品99免费 | 国产精品区二区三区日本 | av网站大全免费 | 狠狠的日 | 久草精品视频在线观看 | 国产尤物一区二区三区 | 少妇啪啪av入口 | 国产精品一区二区三区四 | 在线观看色网 | 久久国产免 | 日韩精品一区二区三区电影 | 国产精品久久久久久一二三四五 | 丁香婷婷深情五月亚洲 | 亚洲视频一级 | 二区三区在线视频 | av亚洲产国偷v产偷v自拍小说 | 国产又粗又猛又爽又黄的视频先 | 日本黄色大片儿 | 日韩在线观看一区二区 | 久久www免费人成看片高清 | 91粉色视频 | 久久精品视频在线 | 久久精品久久精品久久精品 | 中文字幕在线影院 | 最近高清中文字幕在线国语5 | 国产精品系列在线观看 | 欧美色伊人 | 日韩欧美极品 | 欧美国产不卡 | 久久久精品在线观看 | 国产手机视频 | 在线 日韩 av | 久插视频 | www操操操 | 2023av在线| 亚洲欧美在线综合 | 精品国产一区二区三区在线观看 | 天天av在线播放 | 在线观看91视频 | 国产日韩精品欧美 | 久久理论片| japanesefreesex中国少妇 | 中文字幕中文字幕 | 久久久久久久久久久久国产精品 | 91日韩精品一区 | 国产精品一区二区免费视频 | 日日日操操 | 国产免费一区二区三区网站免费 | 中文字幕av网站 | 久久精品视频2 | 亚洲韩国一区二区三区 | 国产精品av免费在线观看 | 天堂网av在线 | 特级西西人体444是什么意思 | 中文字幕999 | 久久久亚洲网站 | 天堂黄色片 | 在线观看久久久久久 | 探花视频在线观看免费 | 精品久久九九 | 超碰在线97观看 | 亚洲天堂香蕉 | 天天色天天骑天天射 | 又大又硬又黄又爽视频在线观看 | 国产一级特黄毛片在线毛片 | 亚洲欧美日韩中文在线 | 免费观看成人 | 国产99久久99热这里精品5 | 91自拍视频在线观看 | 久草在线视频看看 | 在线v片免费观看视频 | 亚洲美女免费精品视频在线观看 | 欧美一区在线观看视频 | 玖玖综合网 | 日韩免费视频线观看 | 中文字幕黄网 | 91九色在线视频观看 | 久久色网站 | 精品国产一区二区三区不卡 | 亚洲欧美色婷婷 | 国产无吗一区二区三区在线欢 | 国产精品黑丝在线观看 | 日韩免费播放 | 2021久久 | 久久国产精品一国产精品 | 日韩高清av | 99 视频 高清 | 免费在线观看国产黄 | 免费一级片在线 | 99精品在线观看视频 | 国产精品va最新国产精品视频 | 欧洲精品码一区二区三区免费看 | 久久久这里有精品 | 97国产小视频 | 不卡的av片 | 日本不卡一区二区三区在线观看 | 在线观看视频精品 | 久久精品影视 | 色综合色综合色综合 | 免费视频区 | 久久毛片网站 | 手机成人在线 | 国产黄色在线观看 | 成年美女黄网站色大片免费看 | 国产精品一区二区三区久久 | 91福利视频久久久久 | 色永久免费视频 | 国产精品丝袜久久久久久久不卡 | 亚洲女人天堂成人av在线 | 日本天天色 | 免费又黄又爽的视频 | 99久久www免费 | 亚洲少妇自拍 | 91亚洲成人 | 久久久久免费精品国产 | 四虎影视久久久 | 久久99国产精品久久 | 黄色在线观看免费网站 | 三级黄色网络 | 国产视频一区二区在线 | 国产手机在线 | 九九热免费在线观看 | 成片人卡1卡2卡3手机免费看 | 色婷婷国产 | 久久香蕉国产精品麻豆粉嫩av | 黄色片视频在线观看 | 97电影院网 | 天天综合日日夜夜 | 日韩激情视频 | 97在线视频免费观看 | 中文字幕在线久一本久 | 国产精品久久一区二区三区, | 亚洲一区二区三区在线看 | 夜夜骑首页 | 日本视频网 | 色综合久久88色综合天天 | 国产五月色婷婷六月丁香视频 | 国产一级大片免费看 | 国产精品video爽爽爽爽 | 香蕉网在线播放 | 中文字幕亚洲欧美日韩2019 | 中文字幕免费高清 | 国产精品视频区 | 337p欧美 | 亚洲三级在线免费观看 | 欧美性生活大片 | 免费在线观看污 | 免费三级骚 | 在线观看a视频 | 91一区啪爱嗯打偷拍欧美 | 久久九九免费视频 | 91在线麻豆 | 欧洲亚洲激情 | 亚洲乱亚洲乱亚洲 | 免费福利视频网 | 日韩精品一区二 | 操少妇视频 | 成人 亚洲 欧美 | 欧美日韩国产精品一区 | 一区在线观看 | 亚洲欧美成人在线 | h网站免费在线观看 | 国产精品丝袜久久久久久久不卡 | 超碰在线公开免费 | 国产欧美日韩视频 | 国产主播大尺度精品福利免费 | 国产打女人屁股调教97 | av电影不卡 | 久久中文字幕在线视频 | 美女视频a美女大全免费下载蜜臀 | 蜜桃视频在线视频 | 91在线入口 | 丝袜美腿在线 | 国产在线高清精品 | 中文在线www | 久久久久久99精品 | 亚洲精品久久久久中文字幕二区 | 国产精品久久久久久av | 97精品免费视频 | 最近中文字幕大全中文字幕免费 | free. 性欧美.com | 在线观看视频国产一区 | 国产精品久久久久永久免费观看 | 国产精品久久伊人 | 91女子私密保健养生少妇 | 欧美日韩免费看 | 久久久久久久久久久网站 | 97色国产| 久久九九网站 | 99热最新| 天天精品视频 | 九九热国产 | 国产精品99久久久久久人免费 | 久久精品91视频 | 亚洲成人免费 | 不卡的av在线播放 | 五月天精品视频 | 在线欧美a| 免费三级a| 欧美成人基地 | 欧美日韩在线免费观看视频 | 久久高清 | 国产免费高清 | 麻豆系列在线观看 | 国产精品免费视频网站 | 国产中文视频 | 日本精品久久久久 | 91成人欧美 | 毛片随便看| 国产一级视屏 | 久久精品在线免费观看 | 婷婷丁香综合 | 国产拍揄自揄精品视频麻豆 | 亚洲精品国产电影 | 亚洲精品在线视频 | 久久久999| 丁香六月婷婷开心 | 国产91综合一区在线观看 | 久射网| 婷婷亚洲五月 | 国产原创中文在线 | 97人人爽人人 | 国产不卡免费av | 国产拍揄自揄精品视频麻豆 | 午夜av电影院 | 国产亚洲一区二区在线观看 | 狠狠躁夜夜躁人人爽视频 | 久久视频这里有久久精品视频11 | 在线有码中文字幕 | 久久久高清视频 | 国产又粗又猛又黄又爽 | 久久午夜色播影院免费高清 | 在线午夜电影神马影院 | 黄a网站| 欧美日韩视频在线观看免费 | 精品91久久久久 | 国产一区二区精品久久 | 在线看片91| 免费视频 三区 | 五月婷婷久草 | 色噜噜在线观看 | 久久精品视频一 | 成人免费毛片aaaaaa片 | 国产一区精品在线 | 九九精品视频在线观看 | 日韩v在线 | 亚洲专区在线 | 精品久久1 | 91理论片午午伦夜理片久久 | 久久久久视 | 国产一级a毛片视频爆浆 | 婷色在线 | 亚洲激情视频 | 丁香五月亚洲综合在线 | 丁香六月五月婷婷 | 久久99视频 | 久久视频网 | 天天干天天草 | 91日韩在线播放 | 天天干,天天草 | 4438全国亚洲精品观看视频 | 欧美日韩久久久 | 免费a网址| av怡红院| 精品无人国产偷自产在线 | 在线观看精品黄av片免费 | 91视频电影| 免费久久网站 | av高清一区二区三区 | 日本91在线 | 成人a免费看 | 国产日韩精品一区二区在线观看播放 | 美女禁18| 最近日本韩国中文字幕 | 在线观看日本高清mv视频 | 成人午夜在线观看 | 亚洲一级久久 | 人人干网 | 精品国产精品一区二区夜夜嗨 | 亚洲天堂va | 人成在线免费视频 | 手机在线中文字幕 | 国产黄色av | 亚洲精品综合一二三区在线观看 | 欧美婷婷色| 狠狠的操狠狠的干 | 中文字幕高清免费日韩视频在线 | 人人爽人人av | 国产精品v欧美精品v日韩 | 欧美精选一区二区三区 | 亚洲毛片一区二区三区 | 日日爱影视 | 天天综合网~永久入口 | 久久视频在线免费观看 | 久久极品 | 国产精品电影在线 | 国产中文字幕网 | 国产资源精品在线观看 | 日韩理论电影网 | 美女福利视频一区二区 | 成人亚洲网 | 91麻豆精品国产午夜天堂 | 91精品久久久久久综合乱菊 | 国产精品区在线观看 | 国产精品自产拍在线观看网站 | 91精品黄色 | 欧洲精品视频一区 | 91精品视频一区 | 91漂亮少妇露脸在线播放 | 欧美大片在线观看一区 | 在线观看日韩中文字幕 | 天天综合网天天综合色 | 国产福利av在线 | 欧美污污网站 | 97超碰国产精品女人人人爽 | 久久免费看a级毛毛片 | 黄色国产大片 | se婷婷| 欧美成人播放 | 国产精品四虎 | 国产精品9999久久久久仙踪林 | 色综合久久88色综合天天人守婷 | 人人看人人做人人澡 | 国产v在线观看 | 亚洲六月丁香色婷婷综合久久 | 欧美在线1| 超碰电影在线观看 | 成人在线播放视频 | 中文字幕一区二区三区久久蜜桃 | 欧美日本不卡视频 | 国产中文字幕在线看 | 久艹视频在线观看 | 91视频在线网址 | 久久亚洲美女 | 亚洲欧洲国产精品 | 国产精品com | 国产精品日韩久久久久 | 四虎影视欧美 | 一级成人免费视频 | 色婷婷在线播放 | 99国产精品久久久久久久久久 | 精品一区91 | 亚洲91视频 | 国产999精品久久久久久麻豆 | 国产精品久久亚洲 | 国产精品久久久久久妇 | 亚洲精品在线免费观看视频 | 午夜黄色| av午夜电影 | 91日韩精品视频 | 91精品婷婷国产综合久久蝌蚪 | 美女网站在线观看 | 亚洲黄色免费在线看 | 国产精品一区二区在线播放 | 国产小视频在线观看免费 | 国产精品 欧美 日韩 | www.超碰97.com | 成人播放器 | 久久国产精品视频免费看 | 欧美日比视频 | 日日干激情五月 | 欧美日韩免费一区二区 | 五月激情久久久 | 国产精品久久久久久久久免费看 | 91精品在线免费观看视频 | 国产在线a不卡 | 日批视频 | 少妇做爰k8经典 | 国产激情电影综合在线看 | 日韩av一区二区在线播放 | 成人97人人超碰人人99 | 六月色丁| 国产精品 久久 | 国产视频不卡一区 | 91免费在线播放 | 国产成人av综合色 | 在线国产99 | 欧美色综合 | 久久国产视频网站 | 久碰视频在线观看 | av手机在线播放 | 欧美视频在线二区 | 91自拍91| 国产视频精选 | 国产精品久久久久久久久久久久午夜片 | 亚洲欧美成人综合 | 日本精品一区二区三区在线播放视频 | 中国一级片在线 | 五月天丁香综合 | 玖玖精品视频 | 蜜臀av性久久久久av蜜臀妖精 | 亚洲一区在线看 | 91日韩精品 | 久久精品5 | 91女子私密保健养生少妇 | 国产成人精品电影久久久 | 337p日本欧洲亚洲大胆裸体艺术 | 久久一久久 | 国产亚洲欧美日韩高清 | 成人a级网站 | av大全在线免费观看 | 少妇bbbb揉bbbb日本 | 国产91精品高清一区二区三区 | 国产亚洲欧美日韩高清 | 国产在线第三页 | 狠狠躁夜夜av| 亚洲精品久久久蜜桃直播 | 十八岁免进欧美 | 日韩欧美精品在线视频 | 国产色女| 国产 日韩 在线 亚洲 字幕 中文 | 成人av资源网站 | 中文字幕乱偷在线 | 欧美性受极品xxxx喷水 | 日韩在线视频观看免费 | 久久久婷 | 91网址在线 | 国产精品日韩欧美 | av天天色 | 91探花在线视频 | 欧美精品久久久久久久久久丰满 | 国产黄网在线 | 婷婷干五月 | 成人毛片一区二区三区 | 国产91精品高清一区二区三区 | bbbbb女女女女女bbbbb国产 | 日韩在线视频一区 | 国产精品久久久久久久毛片 | 亚洲视频在线视频 | 国产色道 | 日本一区二区三区视频在线播放 | 天天爽人人爽 | 日韩美女免费线视频 | 精品国偷自产国产一区 | 麻豆国产精品永久免费视频 | 久久久一本精品99久久精品 | 日韩一区二区三 | 中文字幕在线观看一区 | 97天堂| 特级毛片网站 | 中文字幕在线观看视频免费 | 亚洲高清激情 | 黄色影院在线播放 | 日日干视频 | 久久一区国产 | 99精品视频99 | 97精品国产手机 | 国产在线精品二区 | 欧美做受高潮电影o | 18国产精品福利片久久婷 | 亚洲一级片在线观看 | 成年人国产在线观看 | 日韩在线免费高清视频 | 婷婷精品国产一区二区三区日韩 | av电影一区二区三区 | 国产精品久久久毛片 | 久久精品成人欧美大片古装 | 天天草天天操 | 色婷婷丁香 | 亚洲九九爱 | 9999在线视频 | 99精品国产免费久久久久久下载 | 精品视频久久 | 久久神马影院 | 国产一区二区三区免费在线 | 激情综合中文娱乐网 | 久久久久久久久久福利 | 国产流白浆高潮在线观看 | 午夜视频黄 | av大片免费在线观看 | 在线免费性生活片 | 日韩激情综合 | 日韩精品中文字幕在线 | 精品国产一区二区三区在线观看 | 国产亚洲综合在线 | 亚洲精品国产日韩 | 四虎国产精品免费观看视频优播 | 99中文视频在线 | 又黄又爽的免费高潮视频 | 色婷在线 | 婷婷久久综合网 | 国产精品99久久久久久武松影视 | 日韩精品视频免费专区在线播放 | 久久精品一二三区 | 日韩免费播放 | 精品国产91亚洲一区二区三区www | 国产高清一区二区 | 国产精品免费视频久久久 | 亚洲 欧美 日韩 综合 | 黄色免费av | 成人久久亚洲 | 丁香花在线视频观看免费 | 欧女人精69xxxxxx | 99精品免费久久久久久日本 | 亚洲精品免费观看 | 欧美亚洲一级片 | 精品一二三四视频 | 亚洲闷骚少妇在线观看网站 | 亚洲人精品午夜 | 成人国产一区 | 欧美日韩视频网站 | 高清av网 | 狠狠色丁香九九婷婷综合五月 | 日韩欧美国产视频 | 在线视频欧美日韩 | 玖玖综合网 | 久久免费黄色大片 | 日本性xxxxx 亚洲精品午夜久久久 | 亚洲va男人天堂 | 日韩一区二区三区高清在线观看 | 黄色a一级片 | 五月婷婷在线视频观看 | 国产精品大片在线观看 | 日韩高清久久 | 波多野结衣电影一区 | 色福利网 | 国产精品麻豆三级一区视频 | 色综合夜色一区 | 国产在线视频在线观看 | 国产精品 中文字幕 亚洲 欧美 | 成人xxxx| 久久热亚洲 | 超碰九九 | 日韩丝袜 | 精品视频专区 | 在线黄色观看 | 成人黄色电影在线 | 久久婷婷一区 | 在线看欧美 | 国产精品一区二区久久精品爱涩 | 五月天婷婷丁香花 | 色网站在线看 | 欧美精品久久99 | 国产欧美最新羞羞视频在线观看 | 亚洲高清资源 | 最近的中文字幕大全免费版 | 成片免费观看视频 | 中文字幕精品www乱入免费视频 | 久久夜视频 | 美女视频黄免费 | 九九亚洲精品 | 国产精品区二区三区日本 | 伊人久久精品久久亚洲一区 | 日韩精品视频在线免费观看 | 狠狠狠色丁香婷婷综合久久五月 | 久久私人影院 | av888.com| 玖玖玖国产精品 | 啪嗒啪嗒免费观看完整版 | 国产精品18久久久 | 在线成人免费电影 | 亚洲不卡av一区二区三区 | 日韩精品1区2区 | 久久久久久看片 | 91av综合 | 久热精品国产 | 超碰人人在 | 99久久精品无码一区二区毛片 | 狠狠干中文字幕 | 成年人免费在线观看 | 综合久久婷婷 | 最近2019好看的中文字幕免费 | 精品黄色在线 | 亚洲乱码久久久 | 91欧美国产 | 特级a老妇做爰全过程 | 久久亚洲欧美日韩精品专区 | 国产日韩av在线 | 91精品专区| 亚洲日本在线一区 | 手机av在线免费观看 | 国产成人久久精品77777综合 | 69热国产视频 | 欧美日韩在线播放一区 | 亚洲桃花综合 | 欧美一级高清片 | 免费av黄色 | 九九九在线观看 | 国产精品18毛片一区二区 | 在线观看一级 | 午夜天天操 | 免费在线观看成年人视频 | 最新av网址大全 | 黄色福利视频网站 | 色视频在线免费 | 欧美视屏一区二区 | 91尤物国产尤物福利在线播放 | 精品亚洲va在线va天堂资源站 | 国产在线播放一区二区 | 亚洲视屏一区 | 国产精品观看 | 国产成人61精品免费看片 | 亚洲女同videos | 久久久成人精品 | 亚洲国产欧美在线人成大黄瓜 | 五月婷婷视频在线观看 | 91视频在线看|