python - 在 Python 中从 int 更改为 int32

标签 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 错误尝试了一些“解决方案”,但没有任何效果。

最佳答案

如果结果应该是一个整数,你应该使用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,并使用 op[znak]?
  • 获取您需要的运算符
  • 您使用的是 Python 3,因此您可以使用漂亮的 a, *b = iterable 语法将 iterable 的第一项提取到 a 并将其他项目放入列表 b,看起来 super 漂亮
  • 每个 op[znak] 都是一个接受两个参数的函数,因此您可以使用 map(int, nums)nums 转换为整数然后将它们作为带有星号的单独参数传递:*map(int, nums)
  • 最后但并非最不重要的一点,如果有 Pythonic 的方式来做到这一点,为什么要使用这种 C 风格的 while 循环索引递增 - 使用 range(start, stop, [step])?
  • 最后,您实际上并不需要变量 n,因此您可以立即将其插入 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())))))

或者只有一行:

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())))))

这些与第一个版本完全一样。现在,这只是为了好玩,展示 Python 的强大程度以及它的困惑程度。 不要在家里尝试这个:D


1 真除法与底除法:1/10 == 0.1,但 1//10 == 0

关于python - 在 Python 中从 int 更改为 int32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42996804/

相关文章:

r - 如何从相当于 R 的 Python 数据帧列表中选择特定数据帧?

python - python中使用函数时,需要创建哪些对象?

Python:AttributeError: 'NoneType' 对象没有属性 'split'

python - 删除csv文件中无用的列和行并使用python保存

python - 获取到下一小时开始的秒数

python - 如何检查响应是否是 Flask 中的文件?

python-3.x - Python3 使用特定 URL 请求 ConnectionError : ('Connection aborted.' , OSError ("(104, ' ECONNRESET')",))

c++ - 为什么python 3.2的Python.h必须和Qt4一起先包含进来

python - 将列表写入 csv 文件,而不是按需要写入

python - 在 Python 3.4 中生成具有重复项的随机数的随机列表