在Python中从int更改为int32

在Python中从int更改为int32,python,python-3.x,Python,Python 3.x,所以我在做一个来自SPOJ的练习,这是一个简单的计算器。每次我试图提交答案时,我都会收到一个NZEC错误,我想知道这是否是因为它应该被定义为int32。 这是我的密码: import sys n = input() n = int(n) i = 0 while n > i: znak, num1, num2 = input().split() num1 = int(num1) num2 = int(num2) if znak == "+":

所以我在做一个来自SPOJ的练习,这是一个简单的计算器。每次我试图提交答案时,我都会收到一个NZEC错误,我想知道这是否是因为它应该被定义为int32。 这是我的密码:

import sys
n = input()
n = int(n)


i = 0
while n > i:
    znak, num1, num2 = input().split()
    num1 = int(num1)
    num2 = int(num2)
    if znak == "+":
        b = num1 + num2
        print(b)
    elif znak == "-":
        b = num1 - num2
        print(b)
    elif znak == "*":
        b = num1 * num2
        print(b)
    elif znak == "/":
        b = num1 / num2
        print(b)
    elif znak == "%":
        b = num1 % num2
        print(b)
    i += 1

sys.exit(0)

我尝试了一些NZEC错误的“解决方案”,但没有任何效果。

如果结果应该是整数,则应使用
运算符。floordiv
,即
a//b
,而不是
a/b
1:

顺便说一句,上面的代码与您的代码完全相同,但大约短了两倍

怎么做

  • 如果你能把所有的数学运算符放在一个字典里,并用
    op[znak]
    得到你需要的运算符,为什么还要用大量的
    if/else
    语句来检查
    znak
    是否等于某个东西呢
  • 您使用的是Python3,因此可以使用漂亮的
    a,*b=iterable
    语法,将
    iterable
    的第一项提取到
    a
    中,并将其他项放入列表
    b
    ,这看起来非常漂亮
  • 每个
    op[znak]
    函数都接受两个参数,因此可以将
    nums
    转换为带有
    map(int,nums)
    的整数,然后将它们作为带星号的单独参数传递:
    *map(int,nums)
  • 最后,但并非最不重要的一点是,如果有类似python的方法,为什么要在循环索引递增时使用这种C样式的
    ——使用
    范围(开始,停止,[step])
  • 最后,您实际上不需要变量
    n
    ,因此可以立即将其插入
    范围

嘘,伙计,感觉需要一些疯狂吗?看看如何将所有这些内容压缩成两行:

from operator import*

sum(0for _ in map(print,((lambda znak,*nums:{'+':add,'-':sub,'*':mul,'/':floordiv,'%':mod}[znak](*map(int,nums)))(*input().split())for _ in range(int(input())))))
或者只有一行:

这些操作与第一个版本完全相同。现在,这只是为了好玩,来展示Python有多强大,它有多凌乱。不要在家里尝试这个:D



1个真实分区与楼层分区:
1/10==0.1
,但
1//10==0

如果结果应为整数,则应使用
运算符.floordiv
,即
a//b
,而不是
a/b
1:

顺便说一句,上面的代码与您的代码完全相同,但大约短了两倍

怎么做

  • 如果你能把所有的数学运算符放在一个字典里,并用
    op[znak]
    得到你需要的运算符,为什么还要用大量的
    if/else
    语句来检查
    znak
    是否等于某个东西呢
  • 您使用的是Python3,因此可以使用漂亮的
    a,*b=iterable
    语法,将
    iterable
    的第一项提取到
    a
    中,并将其他项放入列表
    b
    ,这看起来非常漂亮
  • 每个
    op[znak]
    函数都接受两个参数,因此可以将
    nums
    转换为带有
    map(int,nums)
    的整数,然后将它们作为带星号的单独参数传递:
    *map(int,nums)
  • 最后,但并非最不重要的一点是,如果有类似python的方法,为什么要在循环索引递增时使用这种C样式的
    ——使用
    范围(开始,停止,[step])
  • 最后,您实际上不需要变量
    n
    ,因此可以立即将其插入
    范围

嘘,伙计,感觉需要一些疯狂吗?看看如何将所有这些内容压缩成两行:

from operator import*

sum(0for _ in map(print,((lambda znak,*nums:{'+':add,'-':sub,'*':mul,'/':floordiv,'%':mod}[znak](*map(int,nums)))(*input().split())for _ in range(int(input())))))
或者只有一行:

这些操作与第一个版本完全相同。现在,这只是为了好玩,来展示Python有多强大,它有多凌乱。不要在家里尝试这个:D



1个真实分区与楼层分区:
1/10==0.1
,但
1//10==0

一个简单的解决方案:想法是将输入宪章拆分为保留其顺序的令牌。在我们的例子中,标记是
运算符
数字
,因此使用正则表达式非常简单<代码>[+-/*]
使用
\d+

n = input()
import re
while n>0:
    expression = input()
    operator,num1,num2 = re.findall('[+-/*]|\d+',expression)
    if operator == '+': print(int(num1) + int (num2))
    if operator == '-': print(int(num1) - int (num2))
    if operator == '*': print(int(num1) * int (num2))
    if operator == '%': print(int(num1) % int (num2))
    if operator == '/': print(int(num1) // int (num2))

    n = n - 1

一个简单的解决方案:这个想法是将输入宪章拆分为保留其顺序的令牌。在我们的例子中,标记是
运算符
数字
,因此使用正则表达式非常简单<代码>[+-/*]
使用
\d+

n = input()
import re
while n>0:
    expression = input()
    operator,num1,num2 = re.findall('[+-/*]|\d+',expression)
    if operator == '+': print(int(num1) + int (num2))
    if operator == '-': print(int(num1) - int (num2))
    if operator == '*': print(int(num1) * int (num2))
    if operator == '%': print(int(num1) % int (num2))
    if operator == '/': print(int(num1) // int (num2))

    n = n - 1


无需使用
sys.exit
,程序将自动退出。只需确保其编译器是否正常工作。您为什么认为需要切换到
int32
(不存在)?我不知道NZEC错误是什么,但是,
/10
的输入肯定会在结果应该在int32的方向上抛出一个异常。不需要使用
sys.exit
,程序会自动退出。只是想确定它是否适用于他们的编译器。你凭什么认为需要切换到
int32
(它不存在)?我不知道NZEC错误是什么,但是输入
/10
肯定会在它表示结果应该是int32的方向上抛出一个异常。尽管如此,一个整数除以一个整数,如
a/b
将是一个浮点数。@ForceBru fixedno,它不是:如果你将一个数除以一个浮点数,你甚至可以更确定你会得到一个浮点值。OP在评论中说:“它说结果应该在int32中。”你使用的是Python 2.x,但OP在Python 3.xStill上,一个整数除以一个整数,如
a/b
将是一个浮点数。@ForceBru fixedno,事实并非如此:如果你将一个数字除以一个浮点数,你可以更确定你会得到一个浮点数。OP在评论中这样说:“它说结果应该在int32中。”你使用的是Python 2.x,但OP是在Python 3.x上