【问题标题】:Pascal triangle multiple errors帕斯卡三角多重误差
【发布时间】:2021-03-30 21:40:59
【问题描述】:

我有这段代码来打印带有 N 行的帕斯卡三角形(N 表示用户输入他们想要多少行)。我有所需的格式,但我不知道如何使代码工作。

我是 python 和一般编程的新手,并且真的很挣扎 functions。我不知道如何为函数编写参数,以及如何正确传递它们。

问题是从第二个函数开始(def pascal_triangle_tostring())。我可以获得输入并生成列表。但是从这里我不确定该怎么做。

#should take user input and validates it
def get_triangle_size():
    while True:
        numberOfRows = input("Enter the no. of rows: ")
        try:
            numberOfRows = int(numberOfRows)
        except ValueError:
             print("N must be an integer")
             continue
        if numberOfRows <= 0:
            print("N must be at least 1")
            continue
        break
    return (numberOfRows)

#Should generate Pascals triangle (shaped like a ladder)
def generate_pascal_triangle():
    n = get_triangle_size()
    if n == 1:
        triangle = [[1]]
    elif n == 2:
        triangle = [[1], [1, 1]]
    else:
        triangle = [[1], [1, 1]]
    for i in range(2, n):
        row = [1]
        for j in range(1, i):
            row.append(triangle[i-1][j-1] + triangle[i-1][j])
        row.append(1)
        triangle.append(row)

#should convert the lists of pascal triangle into a string
def pascal_triangle_tostring():
    output = ""
    triangle = get_triangle_size()
    for row in triangle:
        for value in row:
            output += str(value) + "\t"
        output += '\n'

#Main code body should call these functions to print out pascal triangle
print("This program prints a Pascal's triangle with n line")
triangle_size = get_triangle_size()
pascal_triangle = generate_pascal_triangle()
print("Pascal’s triangle with %d lines:\n" % triangle_size)
print(pascal_triangle_tostring(pascal_triangle))

【问题讨论】:

  • 我注意到的第一件事是你提出了一个ValueError,它几乎立即被 excpet 语句捕获,所以你应该删除 raise ValueError 行,因为它弊大于利
  • @Matiiss 哦,是的,没错。我有一个 while 循环可以检查用户输入是否为正整数。我忘了删除raise ValueError,因为我只是在玩代码以查看它的作用。谢谢你。我将编辑代码来解决这个问题
  • 请从intro tour 重复on topichow to ask。您已经转储了大约 35 行代码,却没有让我们知道哪里出了问题。
  • 请提供预期的minimal, reproducible example (MRE)。我们应该能够复制和粘贴您的代码的连续块,执行该文件,并重现您的问题以及跟踪问题点的输出。这让我们可以根据您的测试数据和所需的输出来测试我们的建议。显示中间结果与您的预期不同的地方。
  • @Prune 回答我问题的非常慷慨的人明白我想说什么。我试图解释说代码不起作用有什么问题。我尝试调试和搜索谷歌,但我没有找到我可以理解和实施的解决方案。谢谢。

标签: python python-3.x function


【解决方案1】:

现在我改进了你的代码,所以现在它似乎可以工作了,所以我知道你有问题,所以请问他们。你也应该真正了解python中的function argumentsf strings

#should take user input and validates it
def get_triangle_size():
    # while True:
    numberOfRows = input("Enter the no. of rows: ")
    try:
        numberOfRows = int(numberOfRows)
    except ValueError:
        print("N must be an integer")

    if numberOfRows <= 0:
        print("N must be at least 1")

    return numberOfRows

#Should generate Pascals triangle (shaped like a ladder)
def generate_pascal_triangle(n):
    if n == 1:
        triangle = [[1]]
    elif n == 2:
        triangle = [[1], [1, 1]]
    else:
        triangle = [[1], [1, 1]]
    for i in range(2, n):
        row = [1]
        for j in range(1, i):
            row.append(triangle[i-1][j-1] + triangle[i-1][j])
        row.append(1)
        triangle.append(row)
    return triangle

#should convert the lists of pascal triangle into a string
def pascal_triangle_tostring(triangle):
    output = ""
    for row in triangle:
        for value in row:
            output += str(value) + "\t"
        output += '\n'
    return output

#Main code body should call these functions to print out pascal triangle
print("This program prints a Pascal's triangle with n line")
triangle_size = get_triangle_size()
pascal_triangle = generate_pascal_triangle(triangle_size)
print("Pascal’s triangle with %d lines:\n" % triangle_size)
print(pascal_triangle_tostring(pascal_triangle))

【讨论】:

  • 非常感谢您。我一直在阅读function arguments 我似乎还不够快。我将继续阅读和研究您提供的代码以更好地理解它。再次非常感谢你
  • @MANNY 当然,但学习f strings 也很有用,因为它们非常适合字符串格式化(不必学习任何复杂的基础知识),如果您有问题,请再次提问我会尽力回答他们
  • 我一定会查找并学习它 (f strings)。感谢您的帮助?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 2012-07-13
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多