Pascal字符串的使用(正确的Python示例)

2024-10-02 18:20:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个任务,我要求用户输入11位代码(字符串)。在

(一) 例如,假设用户输入代码是37605030299。在

(二) 然后我需要检查最后一个数字是否匹配。最后一个号码是这样得到的: nr11=(nr1*1+nr2*2+nr3*3+nr4*4+nr5*5+nr6*6+nr7*7+nr8*8+nr9*9+nr10*1)11型

(三) 我写的是:

var  C, nr1, nr2, nr3, nr4, nr5, nr6, nr7, nr8, nr9, nr10, nr11: string;

begin

nr1:=(copy(C, 1, 1));  
nr2:=(copy(C, 2, 1));
nr3:=(copy(C, 3, 1));
nr4:=(copy(C, 4, 1));
nr5:=(copy(C, 5, 1));
nr6:=(copy(C, 6, 1));
nr7:=(copy(C, 7, 1));
nr8:=(copy(C, 8, 1));
nr9:=(copy(C, 9, 1));
nr10:=(copy(C, 10, 1));
nr11:=(copy(C, 11, 1));   

writeln('Enter the code which contains 11 digits:');
 readln(C);

 if nr11 = (nr1*1 + nr2*2 + nr3*3 + nr4*4 + nr5*5 + nr6*6 + nr7*7 + nr8*8 + nr9*9 + nr10*1) mod 11 then
  begin
   writeln('The code is correct!');
  end

else
 if nr11 <> (nr1*1 + nr2*2 + nr3*3 + nr4*4 + nr5*5 + nr6*6 + nr7*7 + nr8*8 + nr9*9 + nr10*1) mod 11
  begin
   writeln('The code is incorrect!');
  end;

  readln();
end.

这不起作用,因为我知道你不能像我一样在方程中使用字符串,但是它能工作吗?我只是在学帕斯卡,如果这看起来太蠢了,对不起。在

此UI代码应该是正确的。正在检查:

1*3+2*7+3*6+4*0+5*5+6*0+7*3+8*0+9*2+1*9=108

108年11月至9月8日

9*11=99

108-99=9(答案是9,所以最后一位必须是9,最后一位是9,表示代码是正确的)

如果我在python的例子中发现了一个错误,那么我应该怎么做:

^{pr2}$

Tags: 代码copybeginnr1nr2nr6nr3nr5
2条回答

第一件事是当C为空时从C复制内容。在尝试访问其元素之前,应放置readln(C):

writeln('Enter the code which contains 11 digits:');
readln(C);

nr1:=...
nr2:=...

第二点是,如果值只有1个字符,则可以通过索引访问它:

^{pr2}$

要将字符串转换为整数,必须包含sysutils才能使用strpoint函数:http://www.freepascal.org/docs-html/rtl/sysutils/strtoint.html

另一种方法(逐字符)是计算char值与48(即“0”的ASCII代码)之间的差

样本代码:

uses sysutils;
var  C:string
     nr1, nr2, nr3, nr4, nr5, nr6, nr7, nr8, nr9, nr10, nr11: integer;

begin
readln(C);
nr1:=strtoint(C[1]);
nr2:=strtoint(C[2]);
nr3:=strtoint(C[3]);
.
.
.
if nr11 = (nr1*1 + nr2*2 + nr3*3 + nr4*4 + nr5*5 + nr6*6 + nr7*7 + nr8*8 + nr9*9 + nr10*1) mod 11 then
   writeln('The code is correct!') 
   //if you skip the begin/end statements, only the next statement 
   //is executed in loops/if statements
else writeln('Not correct'); //notice that I didn't use ELSE IF but ELSE
readln; 
//in Pascal you can skip the parathenses if you don't pass arguments to the function
end.

看起来像ISBN。为了计算校验位,我建议如下。在

function DigitToInt(const c: Char): Integer;
begin
  if (c<'0') or (c>'9') then
    raise Exception.Create('Invalid input');
  Result := ord(c)-ord('0');
end;

这会将范围从“0”到“9”的单个字符转换为相应的整数值。在

^{pr2}$

这将计算11位代码的校验位。在

要将实际校验位与计算出的校验位进行比较,您可以写下:

if CheckDigit(code) <> DigitToInt(code[11]) then
  .... handle error

相关问题 更多 >