使用Python自动化无聊的东西:第4章练习项目II

时间:2016-02-16 19:22:28

标签: python

我一直在评论一个几乎相似的问题,但没有解决方案来解决我的小问题。

我的代码似乎有用但我仍然得到'IndexError:列表索引超出范围'。

这是我的代码:

grid = [['.', '.', '.', '.', '.', '.',],\
['.', 'O', 'O', '.', '.', '.',],\
['O', 'O', 'O', 'O', '.', '.',],\
['O', 'O', 'O', 'O', 'O', '.',],\
['.', 'O', 'O', 'O', 'O', 'O',],\
['O', 'O', 'O', 'O', 'O', '.',],\
['O', 'O', 'O', 'O', '.', '.',],\
['.', 'O', 'O', '.', '.', '.',],\
['.', '.', '.', '.', '.', '.',]]
def fish():
    m = 0
    n = 0
    while m != len(grid):
        print (grid[m][n] + \
        grid[m+1][n] + \
        grid[m+2][n] + \
        grid[m+3][n] + \
        grid[m+4][n] + \
        grid[m+5][n] + \
        grid[m+6][n] + \
        grid[m+7][n] + \
        grid[m+8][n])
        n = n+1
fish() 

14 个答案:

答案 0 :(得分:2)

我可以提出另一个答案

def fish():
    for line in zip(*grid):
        print(''.join(line))

打印

..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....

答案 1 :(得分:1)

您的m循环永远不会终止,因为您的n值永远不会更新,您只会更新IndexError值。

这会导致您的循环永久运行,当n的值太大时,最终会为您提供while

如果您知道网格中恰好有8行,那么您应该这样做,以便n循环检查m而不是grid[0]的值检查其中一行(如grid = [['.', '.', '.', '.', '.', '.',],\ ['.', 'O', 'O', '.', '.', '.',],\ ['O', 'O', 'O', 'O', '.', '.',],\ ['O', 'O', 'O', 'O', 'O', '.',],\ ['.', 'O', 'O', 'O', 'O', 'O',],\ ['O', 'O', 'O', 'O', 'O', '.',],\ ['O', 'O', 'O', 'O', '.', '.',],\ ['.', 'O', 'O', '.', '.', '.',],\ ['.', '.', '.', '.', '.', '.',]] def fish(): m = 0 n = 0 while n < len(grid[0]): print (grid[m][n] + \ grid[m+1][n] + \ grid[m+2][n] + \ grid[m+3][n] + \ grid[m+4][n] + \ grid[m+5][n] + \ grid[m+6][n] + \ grid[m+7][n] + \ grid[m+8][n]) n = n+1 fish() )的长度,如下所示:

library(stringr)
text_sample<-"After talks in Damascus on Tuesday, the UN special envoy to Syria, Staffan de Mistura, said the Syrian government had a duty to allow access to whoever needed it."
result<-str_extract_all(text_sample,"\\w+")

答案 2 :(得分:1)

我对编程很陌生,我的回答是:

它也给出了正确的结果,但肯定不是解决问题的最佳方法,但仍然是另一种方法。

grid = [['.', '.', '.', '.', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['.', 'O', 'O', 'O', 'O', 'O'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.']]



for x in range(len(grid)):
    for y in range(len(grid)):
        try:
            if y == len(grid)-1:
                print(grid[y][x])

            else:
                print(grid[y][x], end='')
        except IndexError:
            break

答案 3 :(得分:1)

我对问题的解决方案:-

我遵循了提示,并逐列遍历了矩阵(在这种情况下为列表矩阵)。 [0][0],[1][0],[2][0]依此类推。然后,我将遍历的列打印为最终结果的第一行(根据问题的要求)。其他列也以相同的方式进行迭代。

此外,出于娱乐目的,我还将最终结果作为嵌套列表进行了制作,使其就像输入一样。

注:仅在第4章之前使用了知识。正如其他人发布的那样,还有其他高级方法可以解决此问题。

代码

grid = [['.', '.', '.', '.', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['.', 'O', 'O', 'O', 'O', 'O'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.']]

        #Initial Matrix
        for row in grid:
            print (row)

        #Creating the pattern
        result=[]
        for x in range(len(grid[0])):
            strResult= ''
            for y in range(len(grid)):
                  #Printing the pattern in non-list form
                  print(grid[y][x],end='') 
                  strResult = strResult + str(grid[y][x]);
            result.append(list(strResult))
            print()

        #Printing the pattern in list form
        for row in result:
            print (row)

打印

['.', '.', '.', '.', '.', '.']
['.', 'O', 'O', '.', '.', '.']
['O', 'O', 'O', 'O', '.', '.']
['O', 'O', 'O', 'O', 'O', '.']
['.', 'O', 'O', 'O', 'O', 'O']
['O', 'O', 'O', 'O', 'O', '.']
['O', 'O', 'O', 'O', '.', '.']
['.', 'O', 'O', '.', '.', '.']
['.', '.', '.', '.', '.', '.']


..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....


['.', '.', 'O', 'O', '.', 'O', 'O', '.', '.']
['.', 'O', 'O', 'O', 'O', 'O', 'O', 'O', '.']
['.', 'O', 'O', 'O', 'O', 'O', 'O', 'O', '.']
['.', '.', 'O', 'O', 'O', 'O', 'O', '.', '.']
['.', '.', '.', 'O', 'O', 'O', '.', '.', '.']
['.', '.', '.', '.', 'O', '.', '.', '.', '.']

答案 4 :(得分:0)

似乎您希望在任何给定长度的列表中使用此功能。 但任务是让它与实践项目列表中的特定列表一起使用。这段代码只使用了本书中教授的内容,直到第4章(因为我刚刚开始编码,直到这里才知道这本书):

grid = [['.', '.', '.', '.', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['.', 'O', 'O', 'O', 'O', 'O'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.']]
for x in range(0,6):
    print(end='\n')
    for y in range(0,9):
        print(grid[y][x],end='')

答案 5 :(得分:0)

如果您希望使代码适用于任何大小的数组,请查看以下解决方案:

grid = [['.', '.', '.', '.', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['.', 'O', 'O', 'O', 'O', 'O'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'], 
        ['.', '.', '.', '.', '.', '.']]

x = 0
y = 0

while x < len(grid[0]):           #Determine number of lists in list
  while y < len(grid):            #Determine number of lists
    print(grid[y][x], end='')     #Print each element on line
    y += 1                        #Up Y by one each cycle until while stops
  print('\n')                     #Move to a new line
  x += 1                          #Increase x by one and reset Y, restarts 
  y = 0                           #second while loop until both run out.

答案 6 :(得分:0)

以下内容似乎可行(但请专家仔细检查),并且仅使用第1-4章中介绍的工具。我的处女所BTW。

grid = [['.', '.', '.', '.', '.', '.'],
    ['.', '0', '0', '.', '.', '.'],
    ['0', '0', '0', '0', '.', '.'],
    ['0', '0', '0', '0', '0', '.'],
    ['.', '0', '0', '0', '0', '0'],
    ['0', '0', '0', '0', '0', '.'],
    ['0', '0', '0', '0', '.', '.'],
    ['.', '0', '0', '.', '.', '.'],
    ['.', '.', '.', '.', '.', '.']]

n = 0  #index for arbitrary sub-list since all sub-lists are same length 
for i in range(len(grid[n])):  # upper-level loop with i as the "item-level" variable 
    for t in range(len(grid)-1):  # lower-level loop with t as sub-list level variable 
        print(grid[t][i],end='')  # on same line, print one item (i) from each sub-list (t) except for last sub-list 
    print(grid[t][-1])  # after the above lower-level loop finishes (prints eight items), print 9th and final item (i) from sub-list (t), then create new line before continuing upper-level loop for next value of t.

请让我知道我是否没有遇到这种情况可以解决的情况。

答案 7 :(得分:0)

我试图使其普及:

# character picture grid -- ascii art

grid = [['.', '.', '.', '.', '.', '.'],
        ['.', '0', '0', '.', '.', '.'],
        ['0', '0', '0', '0', '.', '.'],
        ['0', '0', '0', '0', '0', '.'],
        ['.', '0', '0', '0', '0', '0'],
        ['0', '0', '0', '0', '0', '.'],
        ['0', '0', '0', '0', '.', '.'],
        ['.', '0', '0', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.']]

# size of grid may vary, so len(grid) is used

def myfish():
    for y in range(len(grid[0])):      # length of first element of list
        for x in range(len(grid)):     # length of list
            print(grid[x][y], end='')
        print('\n')

myfish()

我不确定,因此请告诉我代码在某些情况下是否会崩溃...

答案 8 :(得分:0)

x = 0 
y = 0
while y < len(grid[x]):
for x in range(len(grid)):
        print(grid[x][y], end='')
print()
y +=1

答案 9 :(得分:0)

我正在研究并提出了这个想法:

# Heart with grid project
grid = [['.', '.', '.', '.', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['.', 'O', 'O', 'O', 'O', 'O'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.']]

spam = 0
eggs = 0
bacon = ''

for eggs in range (0,6): #as the book hints we should go row by row so that's why this first 'for'
    for spam in range (0,9):
        bacon += '{}  '.format(grid[spam][eggs]) # Here we swap rows with columns because we want to transpose it; we start by increasing the first value,that's why we use 'spam' first and 'eggs' on the second '[]' and then we proced to the next line.
    print('{}'.format(bacon)) # Here we print the line created for 'bacon'
    bacon = '' #then we need to reset this because otherwise it will stack multiple 'bacons' together
print('There is our pretty heart!')

打印:

.  .  O  O  .  O  O  .  .  
.  O  O  O  O  O  O  O  .  
.  O  O  O  O  O  O  O  .  
.  .  O  O  O  O  O  .  .  
.  .  .  O  O  O  .  .  .  
.  .  .  .  O  .  .  .  .  
There is our pretty heart!

答案 10 :(得分:0)

仅横向于矩阵:

grid = [['.', '.', '.', '.', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['.', 'O', 'O', 'O', 'O', 'O'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.']]

for f in range(len(grid[0:6])):
    for c in range(len(grid[0:9])):
        print(grid[c][f],end=' ')
    print(' ')

output:
. . O O . O O . .  
. O O O O O O O .  
. O O O O O O O .  
. . O O O O O . .  
. . . O O O . . .  
. . . . O . . . .  

答案 11 :(得分:0)

import os
import colorama
from colorama import Fore, Style # to be able to add color
os.system('cls' if os.name == 'nt' else clear) # to clear the screen

grid = [['.', '.', '.', '.', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['.', 'O', 'O', 'O', 'O', 'O'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.']]

for i in range(len(grid[0])):
    for j in range(len(grid)):
        if grid[j][i] == '.': # to decide whether to print or not
            print(' ', end='  ') # to not print .
        else:
            print(Fore.RED + grid[j][i], end='  ') # to print O in red
    print()
print(Style.RESET_ALL) # to reset the colors and style

答案 12 :(得分:0)

这是做什么的。

grid =[
['.', '.', '.', '.', '.', '.'],
['.', 'O', 'O', '.', '.', '.'],
['O', 'O', 'O', 'O', '.', '.'],
['O', 'O', 'O', 'O', 'O', '.'],
['.', 'O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O', '.'],
['O', 'O', 'O', 'O', '.', '.'],
['.', 'O', 'O', '.', '.', '.'],
['.', '.', '.', '.', '.', '.']]

print('Old Grid:')

for i in range(0,len(grid)):
    for j in range(0,len(grid[i])):
        if j==0:
            print(grid[i][j],'  ', end='')
        elif j%(len(grid[i])-1)!=0:
            print(grid[i][j],'  ', end='')
        else:
            print(grid[i][j],'  ')

print('new Grid:')

for y in range(0,len(grid[1])):
    for x in range(0,len(grid)):
        if x==0:
            print(grid[x][y],' ', end='')
        elif x%(len(grid)-1)!=0:
            print(grid[x][y],' ',end='')
        else:
            print(grid[x][y],' ')

OUTPUT

答案 13 :(得分:-2)

在n + 1之后添加一个m + 1,你应该好好去