, 당신은 즉 a // b
하지 a/b
1, operator.floordiv
사용해야합니다
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)))
을 그런데, 위의 코드는 당신과 같은 정확히 같은 않지만, 약 2 배 더 짧습니다!
어떻게?
- 왜
znak
이 if/else
문 톤 뭔가 동일한 경우는 사전 op
에있는 모든 수학 연산자를 넣을 수 있는지 확인하고, 당신이 op[znak]
에 필요한 연산자를 얻을?
- 당신은 당신이
a
에 iterable
의 첫 번째 항목을 추출하고 슈퍼 좋은 보이는 목록b
으로 다른 항목을두고 그 좋은 a, *b = iterable
구문을 사용할 수 있도록
- 각
op[znak]
함수는 파이썬 3에있어 그 두 개의 인수를 받아들이는, 그래서 당신은 map(int, nums)
과 정수로 nums
를 변환 한 후 별표 별도의 인수로 전달 : *map(int, nums)
- 마지막으로 중요한 것은, 왜 Pythoni이 있는지 증가이 C 스타일
while
루프 인덱스를 사용 그것을 할 C 방법 - 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())))))
이 일을 정확하게 첫 번째 버전으로. 이제는 재미있는 일이며, 파이썬이 얼마나 강력하고 얼마나 지저분한지를 보여줍니다. 는 집에서 시도하지 마십시오 : D
1 진정한 부문을 바닥 부문 대 : 1/10 == 0.1
하지만 1 // 10 == 0
을.
사용하여 해당 사업자 또는 숫자의 수의 일치합니다. – ForceBru
컴파일러가 제대로 작동하는지 확인하고 싶었습니다. – Jessus
'int32 '(존재하지 않음)로 전환해야한다고 생각하는 이유는 무엇입니까? – ForceBru