Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 开始在多行打印字符串_Python_Edx - Fatal编程技术网

Python 开始在多行打印字符串

Python 开始在多行打印字符串,python,edx,Python,Edx,用python 我在家里学习edx课程,以扩展我的编程技能。我遇到的一项作业把我难住了。目标是能够插入一个整数,并为其打印一个时间表 此表将分为列和行。对于给定的变量输入,我可以将所需的值组合成一个字符串,用于所有数字的相乘。我添加了在整数之间调用的制表符 现在这是一个字符串,我不能让它分成不同大小的裂缝,并根据最初输入的不同值进行打印 我尝试了文本换行,但不管我如何根据不同的示例进行换行,都会出现错误 请帮助我找到一个解决方案,并解释它为什么有效。我正在努力学习这一点,没有一行一匙的代码可以解

用python

我在家里学习edx课程,以扩展我的编程技能。我遇到的一项作业把我难住了。目标是能够插入一个整数,并为其打印一个时间表

此表将分为列和行。对于给定的变量输入,我可以将所需的值组合成一个字符串,用于所有数字的相乘。我添加了在整数之间调用的制表符

现在这是一个字符串,我不能让它分成不同大小的裂缝,并根据最初输入的不同值进行打印

我尝试了文本换行,但不管我如何根据不同的示例进行换行,都会出现错误

请帮助我找到一个解决方案,并解释它为什么有效。我正在努力学习这一点,没有一行一匙的代码可以解决这个问题,但让我仍然一无所知

到目前为止,我在slack中找到的这个类的提示中没有一个包含课程中列出的术语或命令。但很多东西都没有列出来

这就是我所拥有的,请忽略尝试不同解决方案所留下的额外内容

   mystery_int = 5

#You may modify the lines of code above, but don't move them!
#When you Submit your code, we'll change these lines to
#assign different values to the variables.

#This is a tough one! Stick with it, you can do it!
#
#Write a program that will print the times table for the
#value given by mystery_int. The times table should print a
#two-column table of the products of every combination of
#two numbers from 1 through mystery_int. Separate consecutive
#numbers with either spaces or tabs, whichever you prefer.
#
#For example, if mystery_int is 5, this could print:
#
#1  2   3   4   5
#2  4   6   8   10
#3  6   9   12  15
#4  8   12  16  20
#5  10  15  20  25
#
#To do this, you'll want to use two nested for loops; the
#first one will print rows, and the second will print columns
#within each row.
#
#Hint: How can you print the numbers across the row without
#starting a new line each time? With what you know now, you
#could build the string for the row, but only print it once
#you've finished the row. There are other ways, but that's
#how to do it using only what we've covered so far.
#
#Hint 2: To insert a tab into a string, use the character
#sequence "\t". For example, "1\t2" will print as "1    2".
#
#Hint 3: Need to just start a new line without printing
#anything else? Just call print() with no arguments in the
#parentheses.
#
#Hint 4: If you're stuck, try first just printing out all
#the products in one flat list, each on its own line. Once
#that's working, then worry about how to organize it into
#a table.


#Add your code here!
import textwrap
a = mystery_int
b = 1
c = 0
d = 1
e = ""
f = ""
g = "" 
h = "\t"
j = 1
k = a*2

for b in range(1,a + 1):
    for c in range(1,a+1):
        d = b * c
        e +=str(d)+","
        f = str(e)

g = str.replace(f,"," ,"\t")

#textwrap.wrap(g,10)
#print(g[0:int(k)])
print(g[:k])

就快到了,只需收集列表中每一行的值,然后在每次迭代内部循环后打印行值

假设您基本上已经有了一个完整的解决方案,除了一些小错误,我将提供一个完整的解决方案演练,并给出解释

注释:我们将使用
summary\u int
而不是
a
,并将
b
(外循环增量)更改为
i
,将
c
(内循环增量)更改为
j
,以符合惯例:

mystery_int = 5

for i in range(1, mystery_int+1):
    row = [str(i)]
    for j in range(2, mystery_int+1):
        row = row + [str(i*j)]
    print('\t'.join(row))
输出:

1   2   3   4   5
2   4   6   8   10
3   6   9   12  15
4   8   12  16  20
5   10  15  20  25
外部循环(
i
)迭代行,内部循环(
j
)迭代列。
在每一个新行,我们需要一个新的列表,
,它开始时只有一个元素。第一个元素是我们要乘以的数字(因此第1行的第一个元素是
1
,第2行的第一个元素是
2
,依此类推)

请注意,我们正在将所有整数转换为字符串(
i
-->
str(i)
),因为我们最终希望以空格分隔的序列打印每一行

  • 无论何时使用空格打印,即使要打印的内容由数字组成,也需要将该内容转换为字符串表示形式。(您已经在代码中这样做了,但这一点值得重申,因为这是一个常见的绊脚石。)
现在,在内部循环(
j
)中,计算第一列(
i*2
i*3
,…,
i*int
)之后每列的乘积。对于每个通过内部循环的过程,将新产品添加到
。当我们完成内部循环时,我们将有一个完整的乘法序列列表,该行从integer
i
开始

此时,在移动到下一行之前,请打印出当前行。该方法是连接列表中元素的常用方法,使用
前面指定的分隔符

  • 例如,
    “”.join(row)
    将创建一个由单个空格分隔的值组成的字符串:

    ' '.join(["1","2","3","4","5"])
    # '1 2 3 4 5'
    
  • 我选择使用制表符分隔的字符串,因为打印输出具有更好的格式。(由于某些行具有两位数,而其他行仅具有一位数,因此单个空格分隔符会使列显示不对齐。)

注:

  • 从教学的角度来看,用“基”整数
    i
    初始化每个新的
    行似乎更直观:
    row=[str(i)]
    。这为后面的行计算的其余部分提供了一个可视锚定,在内部循环中。但是,简单地初始化一个空列表,
    row=[]
    ,然后以
    j=1
    开始内部循环也是有效的(可能有点“干净”):

    for i in range(1, mystery_int+1):
        row = []
        for j in range(1, mystery_int+1):
            row = row + [str(i*j)]
        print('\t'.join(row))
    
  • 有了额外的模块,就可以用更简单、通常更快的代码实现相同的目标。看起来您正在使用Python标准库,这就是为什么我在主解决方案中保留了基础知识。但考虑到乘法表实际上是两个相同向量的外积,我们也可以使用模块,它提供了许多快速的数学运算:

    import numpy as np
    print(np.array2string(np.outer(np.arange(1, mystery_int+1), 
                                   np.arange(1, mystery_int+1)), 
                          separator='\t'))
    

重点是,当您开始更多地使用Python来完成给定的任务,而不是简单地学习编程基础知识时,可以合理地假设有一个模块是定制的,适合您的需要,这可以节省实时时间。有一个Python模块

您可以使用“\n”而不是“\t”来获取新行而不是制表符。但是,从您得到的提示来看,他们似乎希望您单独打印这些行,即为每行制作并打印一个单独的字符串。谢谢。是的,这是如何将字符串分成不同大小的部分,以匹配初始变量,并以这种方式打印它们,这给了我适合度。非常感谢。这就是我需要理解的原因。我很感谢你花时间把所有事情都安排成那样。我正在学习python以学习编程,从而将我的职业道路转变为编程和软件开发,因此我需要理解为什么事情不仅仅是解决每个课程问题。我再次感谢你,不客气!祝你转行好运。如果此答案是对您问题的最佳回答,请单击答案左侧的复选标记将其标记为接受。
for i in range(1, mystery_int + 1):
    row_string = ""
    for j in range(1, mystery_int + 1):
        product = i * j
        row_string += str(product) + "\t"
    print(row_string)