计算机科学界?

时间:2017-02-17 15:19:17

标签: python python-3.x computer-science

以下是我不知道编码错误的两个问题:

  1. 在物理学中,对于长度为L且初始角度为A的摆锤,其在时间T的水平位移X(T)由公式

    给出

    X(T)= L×cos(A×cos(T×√9.8/ L)) - L×cos(A)

    编写一个带两行输入的程序;第一行是L,第二行是A.输出应该是十行,给出X(0),X(1),X(2),...,X(9)的值。例如,如果第一行输入为53.1而第二行输入为0.8,则第一行输出为0.0,第二行输出为53.1 * cos(0.8 * cos(1 *√9.8/ 53.1) ) - 53.1 * cos(0.8)~2.66989。

    这就是我所拥有的,虽然评分者表明我做的一些数学错误:

    import math
    L = float(input())
    A = float(input())
    for i in range (0, 10):
       x = L * math.cos(A * math.cos(i * math.sqrt(9.8/L))-L * math.cos(A))
       print(x)
    
  2. 对于此程序,第一行输入是整数宽度。然后,有一些文字; “END”行表示文本的结尾。对于每行文本,您需要通过向左和向右添加句点来打印出它的居中版本,以便每行文本的总长度为宽度。 (所有输入行的长度最多为宽度。)居中意味着如果可能,添加到左侧并添加到右侧的句点数应相等;如果需要,我们允许左侧比右侧多一个时段。例如,输入

    这是我所拥有的,虽然它也不正确:

    width = int(input())
    hi=input()
    while hi != "END":
       WordInput=input()
       x=len(WordInput)
       y=width-x
       half=y%2
       if half == 0:
          a = int(y/2)
          print("." * a)
       elif half == 1:
          b = int(y/2) + 1
          c = int(y/2)
          print("." * b,WordInput,"." * c)
    

2 个答案:

答案 0 :(得分:0)

如果您的输入有文本提示,它可以帮助您调试,如width = int(input("enter width: ")),这将使您更好地了解输入将存储在代码中的哪个位置。

我没有看到#1的问题,但是自从我接受了物理学以来已经有一段时间了。如果您的评分者说数学是错误的,请仔细检查您正在使用的等式,并在代码中添加适当的括号,以确保正确的操作顺序完成。

#2有几个问题。首先,您的程序请求输入错误的次数。你的循环取决于你只分配一次的变量hi;一旦你的代码进入循环,任何东西都不会改变为" END"并且循环永远不会退出。不仅如此,你输入的第一个单词(在hi提示符下)不会被你的循环中的代码所考虑,所以除了" END"简直被忽略了。你会想要更像这样的东西:

   WordInput=input()
   while WordInput != "END":
        # Do your processing and printing code here
        (...)
        # Then get some new input at the end of the loop            
        WordInput=input()

循环重启时,将评估WordInput的新值。

其次,查看您的if声明。你正确地确定长度是偶数(一半== 0),但是在偶数情况下你不会告诉代码实际打印输入单词,只是句点!在实践中,避免使用多个类似的打印语句来设置if / else这样的块是很好的;如果你想返回并更改其格式,你必须记住手动更改其他格式。随着您的代码变得越来越复杂,这将成为一个真正的痛苦,因此通常最好尽可能地压缩您的打印语句。如果不改变你的结构太多,我会怎么做:

    if half == 0:
        a = int(y/2)
    elif half == 1:
        a = int(y/2) + 1
    b = int(y/2)
    print("." * a,WordInput,"." * b)

这样,在任何一种情况下都会分配b,无论如何都会执行相同的print语句。

第三,任何以代码打印和居中的单词都用空格填充。这是因为当您提供print()个多个参数时,默认情况下它们由空格连接。要覆盖它,您可以将separator参数更改为空字符串(或您需要的任何其他内容);

>>>print("." * 4, "Hey", "." * 4)
.... Hey ....

>>>print("." * 4, "Hey", "." * 4, sep="")
....Hey....

答案 1 :(得分:0)

For 1.括号错了!

import math
L = float(input())
A = float(input())
for i in range (0, 10):
  x = L * math.cos(A * math.cos(i * math.sqrt(9.8/L)))-L * math.cos(A)
  print(x)