繁体   English   中英

从C重新编码为Python

[英]Recoding from C to Python

我几乎是C语言的外行,并且正在学习Python。 我需要为Python编写下面描述的例程(用C语言编写):

#include <stdio.h>
#include <math.h>

main()
{
    float   hold[26], hnew[26];
    float   dt, dx;
    float   t, s;
    float   ho;
    float   time;
    float   f1, d2h;

    int i;
    int nx, nlx;
    int n, nend;
    int kount, kprint;


    dt  = 5.0;
    dx  = 10.0;
    t   = 0.02;
    s   = 0.002;
    nx  = 11;
    nlx = nx-1;


    ho = 16.0;
    for( i = 1;  i <= nx;  i++ )
    {
        hold[i] = ho;
        hnew[i] = ho;
    }

    hold[nx] = 11.0;

    printf("\t\t\t\thead\t\t\t\t      time\n\n");
    kount  = 1;
    kprint = 2;

    time = dt;
    nend = 100;


    for( n = 1;  n <= nend;  n++ )
    {
            /* update solution */

        for( i = 2;  i <= nlx;  i++ )
        {
            f1 = dt*t/s;
            d2h = ( hold[i+1] - 2.0*hold[i] + hold[i-1])/(dx*dx);
            hnew[i] = hold[i] + (f1*d2h);
        }

        for( i = 1;  i <= nlx;  i++ )
        {
            hold[i] = hnew[i];
        }


        if( kount == kprint )
        {
            for( i = 1;  i <= nx;  i++ )
            {
                printf(" %.2f",hold[i]);
            }
            printf("   %6.2f\n",time);
            kount = 0;
        }

        time  = time + dt;
        kount = kount + 1;
    }
}

这是我对Python的尝试:

import numpy as np
dt = 5.0
dx = 10.0
t = 0.02
s = 0.002
nx = 11
nlx = nx - 1
ho = 16.0

hold = np.zeros(nx+1)
hnew = np.zeros(nx+1)

for i in range(nx):
    hold[i] = ho
    hnew[i] = ho

hold[nx] = 11.0

但是,我无法克服这个问题,因为我不知道printf函数的Python对应对象。 Python中此函数的正确形式是什么? 它代表什么?

只需在Python中使用.format print() .format

例如:

x, y = 1, 2

print("x = {0}, y = {1}".format(x, y))

这是文档

要进行类似于C的printf的打印,下面是一个示例:

f = 3.25645
g = 3.14159265358979

for fl in (f,g):
    print(f'{fl:.2f}')


3.26
3.14

print的第一个fformat说明符。 花括号中的f表示将数字视为浮点数。

它只是print() (请参见下面的小程序)

squares = []
for x in range(14):
 squares.append(x**2)

squares

squares2 = [x**2 for x in range(100)]

print (squares2) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM