【问题标题】:Change a number into a word inside a table将数字更改为表格内的单词
【发布时间】:2013-11-29 21:39:55
【问题描述】:

我必须编写一个输出数字 1-100 的程序。这种格式:

 1   11   21   31   41   51   61   71   81   91
 2   12   22   32   42   52   62   72   82   92
 3   13   23   33   43   53   63   73   83   93
 4   14   24   34   44   54   64   74   84   94
 5   15   25   35   45   55   65   75   85   95
 6   16   26   36   46   56   66   76   86   96
 7   17   27   37   47   57   67   77   87   97
 8   18   28   38   48   58   68   78   88   98
 9   19   29   39   49   59   69   79   89   99
10   20   30   40   50   60   70   80   90  100

这不是问题,但在下一步中,我必须将每个可以除以 3 或包含 3 的数字替换为特定单词。比夫在我的情况下。所以输出应该是这样的:

   1   11 Biff Biff   41 Biff   61   71 Biff   91
   2 Biff   22 Biff Biff   52   62 Biff   82   92
Biff Biff Biff Biff Biff Biff Biff Biff Biff Biff
   4   14 Biff Biff   44 Biff   64   74 Biff   94
   5 Biff   25 Biff Biff   55   65 Biff   85   95
Biff   16   26 Biff   46   56 Biff   76   86 Biff
   7   17 Biff Biff   47 Biff   67   77 Biff   97
   8 Biff   28 Biff Biff   58   68 Biff   88   98
Biff   19   29 Biff   49   59 Biff   79   89 Biff
  10   20 Biff   40   50 Biff   70   80 Biff  100

这就是我卡住的地方。现在我的代码如下所示:

number=1
while number< 11:
    if (number % 3 == 0):
        print("Biff")
        number +=1
    else:
        print('{0:4d} {1:4d} {2:4d} {3:4d} {4:4d} {5:4d} {6:4d} {7:4d} {8:4d} {9:4d}'.format(number, number+10, number+20, number+30, number+40, number+50, number+60, number+70, number+80, number+90))
        number +=1

输出如下所示:

   1   11   21   31   41   51   61   71   81   91
   2   12   22   32   42   52   62   72   82   92
Biff
   4   14   24   34   44   54   64   74   84   94
   5   15   25   35   45   55   65   75   85   95
Biff
   7   17   27   37   47   57   67   77   87   97
   8   18   28   38   48   58   68   78   88   98
Biff
  10   20   30   40   50   60   70   80   90  100

我正在尝试替换可以除以 3 的数字。但不是替换单个数字,而是替换整行。

【问题讨论】:

    标签: python numbers words


    【解决方案1】:

    这是我对您的代码的修改:

    for number in range(1, 11):
        line_contents = []
        for j in range(10):
            n = number + j * 10
            if (n % 3 == 0):
                line_contents.append("Biff")
            else:
                line_contents.append("{0:4d}".format(n))
        print(" ".join(line_contents))
    

    这给了我:

       1   11 Biff   31   41 Biff   61   71 Biff   91
       2 Biff   22   32 Biff   52   62 Biff   82   92
    Biff   13   23 Biff   43   53 Biff   73   83 Biff
       4   14 Biff   34   44 Biff   64   74 Biff   94
       5 Biff   25   35 Biff   55   65 Biff   85   95
    Biff   16   26 Biff   46   56 Biff   76   86 Biff
       7   17 Biff   37   47 Biff   67   77 Biff   97
       8 Biff   28   38 Biff   58   68 Biff   88   98
    Biff   19   29 Biff   49   59 Biff   79   89 Biff
      10   20 Biff   40   50 Biff   70   80 Biff  100
    

    关键的变化是有一个变量n 依次包含每个数字,并测试它是否能被 3 整除。您只是测试 number 是否能被 3 整除,即只有开头的数字行的。

    我还尝试通过存储字符串列表并在内部循环中构建这些字符串来整理如何生成每一行。在每个内部循环之后我 concatenate the strings 并打印结果。

    如有任何不清楚的部分,请随时询问。

    【讨论】:

    • 我刚刚重新阅读了您的问题并看到了“或包含 3”部分。如果您需要,我会添加,但我会鼓励您先尝试让它自己工作。
    • 首先,非常感谢您的帮助。这就是我的想法,但我找不到解决方案。我在打印后和代码末尾放了一些括号,因为我使用的是 Python 3,它工作得非常好。现在我应该可以完成剩下的编码了 :) 再次感谢一百万!
    【解决方案2】:
    for i in range(10):
        for j in range(10):
            n = 1+i+j*10
            print "{0:4d}".format(n) if (n) % 3 != 0 and  '3' not in str(n) else "Biff",
        print
    

    给了

    $ python t.py 
       1   11 Biff Biff   41 Biff   61   71 Biff   91
       2 Biff   22 Biff Biff   52   62 Biff   82   92
    Biff Biff Biff Biff Biff Biff Biff Biff Biff Biff
       4   14 Biff Biff   44 Biff   64   74 Biff   94
       5 Biff   25 Biff Biff   55   65 Biff   85   95
    Biff   16   26 Biff   46   56 Biff   76   86 Biff
       7   17 Biff Biff   47 Biff   67   77 Biff   97
       8 Biff   28 Biff Biff   58   68 Biff   88   98
    Biff   19   29 Biff   49   59 Biff   79   89 Biff
      10   20 Biff   40   50 Biff   70   80 Biff  100
    

    【讨论】:

      【解决方案3】:
      map(lambda x: x * (x % 3 == 0) or "Biff", you_list)
      

      【讨论】:

        【解决方案4】:
        entries = ['Biff' if n % 3 == 0 or n % 10 == 3 else '{:4d}'.format(n) for n in range(1, 101)]
        
        for row in range(10):
            print(' '.join(e for e in entries[row::10]))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-13
          • 2013-09-15
          • 1970-01-01
          • 2013-05-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多