在Python中从int更改为int32

时间:2017-03-24 10:16:57

标签: 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 == "+":
        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错误,但没有任何效果。

2 个答案:

答案 0 :(得分:4)

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

from operator import add, sub, mul, floordiv, mod

op = {'+': add, '-': sub, '*': mul, '/': floordiv, '%': mod}

for i in range(int(input())):
    znak, *nums = input().split()

    print(op[znak](*map(int, nums)))

顺便说一下,上面的代码与你的完全相同,但它的时间缩短了两倍!

如何?

  • 如果您可以将所有数学运算符放在字典znak中,为什么检查if/else是否等于具有大量op语句的内容,并通过{获取所需的运算符{1}}?
  • 你使用的是Python 3,所以你可以使用那个很好的op[znak]语法将a, *b = iterable的第一项提取到iterable中,并将其他项放入列表< / em> a,看起来超级好看
  • 每个b是一个接受两个参数的函数,因此您将op[znak]转换为带有nums的整数,然后将它们作为单独的参数传递给星号:map(int, nums)
  • 最后,但并非最不重要的一点,为什么使用这种C风格的*map(int, nums)循环索引递增,如果有Pythonic的方法呢?使用while
  • 最后,您并不真正需要变量range(start, stop, [step]),因此您可以立即将其插入n

Pssst,伙计,感觉需要一些疯狂?看看如何将所有这些分成两行:

range

或仅一行

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 真正的师与地板师:sum(0for _ in map(print,((lambda znak,*nums:{'+':lambda a,b:a+b,'-':lambda a,b:a-b,'*':lambda a,b:a*b,'/':lambda a,b:a//b,'%':lambda a,b:a%b}[znak](*map(int,nums)))(*input().split())for _ in range(int(input()))))) ,但是1 / 10 == 0.1

答案 1 :(得分:0)

一个简单的解决方案:我们的想法是将输入包机分成保留订单的令牌。在我们的例子中,令牌是numbers[+-/*]所以使用正则表达式非常简单。 \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

匹配任何运算符或任意位数
New-Item -Type Directory -Path "C:\MyFolder"
$Acl = Get-Acl "C:\MyFolder"
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule("username", "FullControl", "Allow")
$Acl.SetAccessRule($Ar)
Set-Acl -Path "C:\MyFolder" -AclObject $Acl