在Python中从int更改为int32
所以我在做一个来自SPOJ的练习,这是一个简单的计算器。每次我试图提交答案时,我都会收到一个NZEC错误,我想知道这是否是因为它应该被定义为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 == "+":
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上