在 python 中的同一行打印格式化列表项
printing formatted list items on the same line in python
我是一名初级程序员,正在完成 freecodecamp 上的最后一个项目。
我正在使用 Mac OS python3.10
该问题要求我们创建一个函数,将水平排列的算术问题列表作为参数并垂直重新排列它们。
这是函数调用:
arithmetic_arranger(["32 + 698", "3801 - 2", "45 + 43", "123 + 49"])
这是期望的结果:
32 3801 45 123
+ 698 - 2 + 43 + 49
----- ------ ---- -----
我能够在垂直方向上重新格式化方程式,但我无法弄清楚如何在同一行上并排打印它们。这是我写的代码。
def aa(problem) :
for i in problem[:] :
problem.remove(i)
p = i.split()
# print(p)
ve = '\t{:>5}\n\t{:<1}{:>4}\n\t-----'.format(p[0],p[1],p[2])
print(ve)
return
aa(["32 + 698", "3801 - 2", "45 + 43", "123 + 49"])
这是该代码的结果。
32
+ 698
-----
3801
- 2
-----
45
+ 43
-----
123
+ 49
-----
我已经尝试过使用 print(*variable) 和 ' '.join。当我尝试这些解决方案时,我得到了这个。
3 2
+ 6 9 8
- - - - -
3 8 0 1
- 2
- - - - -
4 5
+ 4 3
- - - - -
1 2 3
+ 4 9
- - - - -
感谢您花时间阅读我的问题,感谢您的帮助。
当您向终端打印一个字符时,光标位置向前移动。当您打印换行符时,光标会向下移动一个位置。您必须再次手动调出它才能在上面的行中打印。您可以使用 ANSI Escape Codes 来控制光标的位置。它要困难和复杂得多。
您可以通过更改方程式的表示方式来获得所需的输出。将每个方程存储为 [operand1, sign, operand2]
。现在,只需在一行中打印所有 operand1。接下来打印符号和操作数 2。然后打印 -----
.
def fmt(lst):
op1, sign, op2 = zip(*map(str.split, lst))
line1 = "\t".join([f"{op:>5}" for op in op1])
line2 = "\t".join([f"{s:<1}{op:>4}" for s, op in zip(sign, op2)])
line3 = "-----\t"*len(lst)
print("\n".join([line1, line2, line3])
fmt(["32 + 698", "3801 - 2", "45 + 43", "123 + 49"])
输出:
32 3801 45 123
+ 698 - 2 + 43 + 49
----- ----- ----- -----
感谢所有花时间提供帮助的人。我使用@MarkTolonen 的提示提出了一个解决方案,他建议我将列表放在列表中。以下是我的解决方案。让我知道是否有更优雅的方法。
函数:
def aa(problem) :
new_list = list()
for i in problem[:] :
problem.remove(i)
p = i.split()
new_list.append(p)
print(new_list)
for l in new_list :
l1 = '{:>5}'.format(l[:][0])
print(l1,end=' ')
print('')
for l in new_list:
l2 = '{:<1}{:>4}'.format(l[:][1],l[:][2])
print(l2,end=' ')
print('')
for l in new_list:
print('-----',end=' ')
return
函数调用:
aa(["32 + 698", "3801 - 2", "45 + 43", "123 + 49"])
结果:
32 3801 45 123
+ 698 - 2 + 43 + 49
----- ----- ----- ----- %
还有。打印破折号末尾的“%”是什么意思?
这是一个完全符合预期结果的解决方案。它决定了每个方程的宽度:
def arithmetic_arranger(equations):
# Parse to list of lists, e.g.:
# [['32', '+', '698'], ['3801', '-', '2'], ['45', '+', '43'], ['123', '+', '49']]
parsed = [equation.split() for equation in equations]
# For each sublist, determine the widest string and build a list of those widths, e.g.:
# [3, 4, 2, 3]
widths = [len(max(items,key=len)) for items in parsed]
# zip() matches each width with each parsed sublist.
# Print the first operands right-justified with appropriate widths.
print(' '.join([f' {a:>{w}}' for w,(a,op,b) in zip(widths,parsed)]))
# Print the operator and the second operand.
print(' '.join([f'{op} {b:>{w}}' for w,(a,op,b) in zip(widths,parsed)]))
# Print the dashed lines under each equation.
print(' '.join(['-'*(w+2) for w in widths]))
arithmetic_arranger(["32 + 698", "3801 - 2", "45 + 43", "123 + 49"])
输出:
32 3801 45 123
+ 698 - 2 + 43 + 49
----- ------ ---- -----
我是一名初级程序员,正在完成 freecodecamp 上的最后一个项目。
我正在使用 Mac OS python3.10
该问题要求我们创建一个函数,将水平排列的算术问题列表作为参数并垂直重新排列它们。
这是函数调用:
arithmetic_arranger(["32 + 698", "3801 - 2", "45 + 43", "123 + 49"])
这是期望的结果:
32 3801 45 123
+ 698 - 2 + 43 + 49
----- ------ ---- -----
我能够在垂直方向上重新格式化方程式,但我无法弄清楚如何在同一行上并排打印它们。这是我写的代码。
def aa(problem) :
for i in problem[:] :
problem.remove(i)
p = i.split()
# print(p)
ve = '\t{:>5}\n\t{:<1}{:>4}\n\t-----'.format(p[0],p[1],p[2])
print(ve)
return
aa(["32 + 698", "3801 - 2", "45 + 43", "123 + 49"])
这是该代码的结果。
32
+ 698
-----
3801
- 2
-----
45
+ 43
-----
123
+ 49
-----
我已经尝试过使用 print(*variable) 和 ' '.join。当我尝试这些解决方案时,我得到了这个。
3 2
+ 6 9 8
- - - - -
3 8 0 1
- 2
- - - - -
4 5
+ 4 3
- - - - -
1 2 3
+ 4 9
- - - - -
感谢您花时间阅读我的问题,感谢您的帮助。
当您向终端打印一个字符时,光标位置向前移动。当您打印换行符时,光标会向下移动一个位置。您必须再次手动调出它才能在上面的行中打印。您可以使用 ANSI Escape Codes 来控制光标的位置。它要困难和复杂得多。
您可以通过更改方程式的表示方式来获得所需的输出。将每个方程存储为 [operand1, sign, operand2]
。现在,只需在一行中打印所有 operand1。接下来打印符号和操作数 2。然后打印 -----
.
def fmt(lst):
op1, sign, op2 = zip(*map(str.split, lst))
line1 = "\t".join([f"{op:>5}" for op in op1])
line2 = "\t".join([f"{s:<1}{op:>4}" for s, op in zip(sign, op2)])
line3 = "-----\t"*len(lst)
print("\n".join([line1, line2, line3])
fmt(["32 + 698", "3801 - 2", "45 + 43", "123 + 49"])
输出:
32 3801 45 123
+ 698 - 2 + 43 + 49
----- ----- ----- -----
感谢所有花时间提供帮助的人。我使用@MarkTolonen 的提示提出了一个解决方案,他建议我将列表放在列表中。以下是我的解决方案。让我知道是否有更优雅的方法。
函数:
def aa(problem) :
new_list = list()
for i in problem[:] :
problem.remove(i)
p = i.split()
new_list.append(p)
print(new_list)
for l in new_list :
l1 = '{:>5}'.format(l[:][0])
print(l1,end=' ')
print('')
for l in new_list:
l2 = '{:<1}{:>4}'.format(l[:][1],l[:][2])
print(l2,end=' ')
print('')
for l in new_list:
print('-----',end=' ')
return
函数调用:
aa(["32 + 698", "3801 - 2", "45 + 43", "123 + 49"])
结果:
32 3801 45 123
+ 698 - 2 + 43 + 49
----- ----- ----- ----- %
还有。打印破折号末尾的“%”是什么意思?
这是一个完全符合预期结果的解决方案。它决定了每个方程的宽度:
def arithmetic_arranger(equations):
# Parse to list of lists, e.g.:
# [['32', '+', '698'], ['3801', '-', '2'], ['45', '+', '43'], ['123', '+', '49']]
parsed = [equation.split() for equation in equations]
# For each sublist, determine the widest string and build a list of those widths, e.g.:
# [3, 4, 2, 3]
widths = [len(max(items,key=len)) for items in parsed]
# zip() matches each width with each parsed sublist.
# Print the first operands right-justified with appropriate widths.
print(' '.join([f' {a:>{w}}' for w,(a,op,b) in zip(widths,parsed)]))
# Print the operator and the second operand.
print(' '.join([f'{op} {b:>{w}}' for w,(a,op,b) in zip(widths,parsed)]))
# Print the dashed lines under each equation.
print(' '.join(['-'*(w+2) for w in widths]))
arithmetic_arranger(["32 + 698", "3801 - 2", "45 + 43", "123 + 49"])
输出:
32 3801 45 123
+ 698 - 2 + 43 + 49
----- ------ ---- -----