1

我正在制作一个代码,用于使用此代码显示 GP 的 4 个初始数字:

def progG(a1,q):
    return float(a1), float(a1*q), float(a1*q**2), float(a1*q**3)

def main():
    a1 = input("Informe o valor inicial de sua Progressão Geométrica: ")
    q = input("Informe a razão de sua Progressão Geométrica: ")
    print "Os 4 primeiros elementos de uma P.G. de valor inicial %.f e razão %.f são: %.f ." %(a1,q,(progG(a1,q)))
if __name__ == "__main__":      
    main()

当我把它放在Shell上运行时,它让我提出了两个问题,但随后出现了这个错误:

Traceback (most recent call last):
  File "C:\Users\Suzana Maria\Downloads\aula6_ex8.py", line 25, in <module>
    main()
  File "C:\Users\Suzana Maria\Downloads\aula6_ex8.py", line 23, in main
    print "Os 4 primeiros elementos de uma P.G. de valor inicial %.f e razão %.f são: %.f ." %(a1,q,(progG(a1,q)))
TypeError: float argument required, not tuple
4

3 回答 3

2

问题是您的函数 progG(a1, q) 返回一个元组 - 四个值 - 而不是浮点数,但您尝试将其打印为单个浮点数。

你可以试试:

geometric_string = ", ".join(["%.f" % x for x in progG(a1, q)])

print"Os 4 primeiros elementos de uma P.G. de valor inicial %.f e razão %.f são:", geometric_string
于 2013-09-11T00:05:11.430 回答
1

The problem is that %.f requires a single float, but you're giving it four floats, wrapped up in a tuple.

You can fix this by using %s instead of %.f, because %s takes anything at all:

print "Os 4 primeiros elementos de uma P.G. de valor inicial %.f e razão %.f são: %s ." %(a1,q,(progG(a1,q)))

The output will be something like:

Os 4 primeiros elementos de uma P.G. de valor inicial 2 e razão 3 são: (2.0, 6.0, 18.0, 54.0) .

Notice that you have no control over how the numbers in the tuple are formatted, or how the tuple itself is formatted. So you get 2.0 instead of 2, and you get parentheses around the whole thing, and so on.

If you want more control, you need to format things in two steps: first build a string for the tuple, then do the final formatting using that string in place of the tuple. Having total control also means you have to do a bit more work, but it's not too bad:

g = ", ".join("%.f" % x for x in progG(a1, q))
print "Os 4 primeiros elementos de uma P.G. de valor inicial %.f e razão %.f são: %s ." %(a1,q,g)

And now:

Os 4 primeiros elementos de uma P.G. de valor inicial 2 e razão 3 são: 2, 6, 18, 54 .

The first trick here is using the join method on strings, which takes a sequence of strings and joins them up. For example, ":".join([1, 2, 3, 4]) will give you the string 1:2:3:4. The second trick is using a comprehension to map each member of the tuple into something different—in this case, map each float x into the string "%.f" % x.

于 2013-09-11T00:34:28.087 回答
1

我不会说葡萄牙语(或者这是西班牙语?),但我已尽力消除您的错误:

def progG(a1,q):
    return float(a1), float(a1*q), float(a1*q**2), float(a1*q**3)

def main():
    a1 = input("Informe o valor inicial de sua Progressão Geométrica: ")
    q = input("Informe a razão de sua Progressão Geométrica: ")
    print "Os 4 primeiros elementos de uma P.G. de valor inicial %.f e razão %.f são: ." %(a1,q), (progG(a1,q))

if __name__ == "__main__":      
    main()
于 2013-09-11T00:14:17.140 回答