program tip

python-홀수 / 짝수 확인 및 숫자 크기에 대한 출력 변경

radiobox 2020. 12. 7. 08:00
반응형

python-홀수 / 짝수 확인 및 숫자 크기에 대한 출력 변경


과제를 해결하기 위해 몇 가지 문제를 해결해야하는데 약간 갇혀 있습니다. 문제는 사용자가 홀수 (홀수인지 확인)를 입력하고 입력 크기에 따라 거꾸로 된 별 피라미드를 인쇄하는 프로그램을 작성하는 것입니다.

예를 들어 5를 입력하면 다음과 같이 표시됩니다.

*****
 ***
  *

따라서 내 문제는 두 가지입니다.

1) 짝수인지 홀수인지 어떻게 확인하나요? 나는 if number/2 == int그것이 무언가를 할 수 있기를 바라 면서 시도 했고, 인터넷은 나에게하라고 말 if number%2==0했지만 작동하지 않습니다.

2) 각 줄 중간의 별표는 어떻게 변경합니까?

두 문제에 대한 도움을 주시면 대단히 감사하겠습니다.


이것이 숙제이기 때문에 완전한 대답을 제공하는 것은 전혀 의미가 없으므로 여기에 몇 가지 지침이 있습니다.

짝수 또는 홀수 :

number % 2 == 0

확실히 당신의 숫자가 짝수인지 알아내는 아주 좋은 방법입니다.

당신이 모르는 경우에 %, 이것은 여기에 number의해 나눈 나머지 인 모듈로를 수행 합니다 2. http://en.wikipedia.org/wiki/Modulo_operation

피라미드 인쇄 :

첫 번째 조언 : 인쇄 *****하려면 print "*" * 5.

두 번째 조언 : 별표를 가운데에 맞추려면 별표 앞에 몇 개의 공백을 써야하는지 알아 내야합니다. 그런 다음 공백과 별표를 인쇄 할 수 있습니다.print " "*1 + "*"*3


% 2의 모듈로 2 솔루션은 좋지만 나눗셈과 빼기가 필요합니다. 컴퓨터는 이진 산술을 사용하기 때문에 훨씬 더 효율적인 솔루션은 다음과 같습니다.

# This first solution does not produce a Boolean value. 
is_odd_if_zero = value & 1

# or

is_odd = (value & 1) == 1

# or

is_even = (value & 1) == 0

간단하지만 빠르다 :

>>> def is_odd(a):
...     return bool(a - ((a>>1)<<1))
...
>>> print(is_odd(13))
True
>>> print(is_odd(12))
False
>>>

또는 더 간단합니다.

>>> def is_odd(a):
...   return bool(a & 1)

1) 짝수인지 홀수인지 어떻게 확인하나요? "if number / 2 == int"가 뭔가를 할 수 있기를 바라며 시도했는데 인터넷에서 "if number % 2 == 0"을하라고했지만 작동하지 않습니다.

def isEven(number):
        return number % 2 == 0

if number%2==0

짝수라고 말할 것입니다. 따라서 홀수는 else 문이 될 것입니다. "%"는 나눈 후 나머지를 반환하는 모드 기호입니다. 따라서 본질적으로 숫자가 2로 나눌 수 있다면 짝수라고 안전하게 가정 할 수 있습니다. 그렇지 않으면 이상합니다 (완벽한 상관 관계입니다!)

별표 배치에 관해서는 별표 앞에 해당 행과 관련된 공백 수를 추가하려고합니다. 귀하의 예에서

***** line 0
***   line 1
*     line 2

그에 따라 간격을두고 싶을 것입니다.

0*****
01***
012*

la = lambda x : "even" if not x % 2 else "odd"

가장 쉽고 기본적인 방법은

import math

number = int (input ('Enter number: '))

if number % 2 == 0 and number != 0:
    print ('Even number')
elif number == 0:
    print ('Zero is neither even, nor odd.')
else:
    print ('Odd number')

기본 조건과 수학. 또한 짝수도 아니고 홀수도 아닌 0을 염두에두고 입력으로 원하는 숫자를 제공하므로 매우 가변적입니다.


인쇄물과 관련하여 Format Specification Mini 언어를 사용하여 수행하는 방법은 다음 과 같습니다 (섹션 : 텍스트 정렬 및 너비 지정 ).

길이가 확인되면 다음과 같이 말합니다 length = 11.

rowstring = '{{: ^{length:d}}}'.format(length = length) # center aligned, space-padded format string of length <length>
for i in xrange(length, 0, -2): # iterate from top to bottom with step size 2
    print rowstring.format( '*' * i )

int 값이 홀수인지 짝수인지 확인하는 방법에는 여러 가지가 있습니다. 두 가지 주요 방법을 보여 드리겠습니다.

number = 5

def best_way(number):
    if number%2==0:
        print "even"
    else:
        print "odd"

def binary_way(number):
    if str(bin(number))[len(bin(number))-1]=='0':
        print "even"
    else:
        print "odd"
best_way(number)
binary_way(number)

도움이 되길 바랍니다


이것은 간단한 코드입니다. 당신은 그것을 시도하고 쉽게 지식을 얻을 수 있습니다.

n = int(input('Enter integer : '))
    if n % 2 == 3`8huhubuiiujji`:
        print('digit entered is ODD')
    elif n % 2 == 0 and 2 < n < 5:
        print('EVEN AND in between [2,5]')
    elif n % 2 == 0 and 6 < n < 20:
        print('EVEN and in between [6,20]')
    elif n % 2 == 0 and n > 20:
       print('Even and greater than 20')

등등...


내 해결책은 다음과 같습니다.

def is_even(n):
    r=n/2.0
    return True if r==int(r) else False

샘플 명령어 정수가 주어지면 n다음 조건부 작업을 수행합니다.

  • n이 홀수이면 이상한 인쇄
  • n이 짝수이고 2에서 5까지의 범위에 있으면 Not Weird를 인쇄합니다.
  • n이 짝수이고 6에서 20까지의 범위에 있으면 Weird를 인쇄합니다.
  • n이 짝수이고 20보다 크면 Not Weird를 인쇄합니다.
import math
n = int(input())

if n % 2 ==1:
    print("Weird")
elif n % 2==0 and n in range(2,6):
    print("Not Weird")
elif n % 2 == 0 and n in range(6,21):
    print("Weird")
elif n % 2==0 and n>20:
    print("Not Weird")

여기에있는 몇 가지 솔루션 은 속도를 예측하는 것으로 밝혀진 의 크기에 따라 어떻게 달라지는 지 체계적으로 확인하지 않고 다양한 "균등 한"작업, 특히 n % 2대에 걸리는 시간을 참조합니다 .n & 1n

짧은 대답은 합리적 크기의 숫자 ( 일반적으로 <1e9)를 사용하는 경우 큰 차이가 없다는 것입니다. 더 큰 숫자를 사용하는 경우 비트 연산자를 사용하고 싶을 것입니다.

다음은 무슨 일이 일어나고 있는지 보여주는 플롯입니다 (Linux 5.1.2에서 Python 3.7.3 사용).

python3.7 벤치 마크

Basically as you hit "arbitrary precision" longs things get progressively slower for modulus, while remaining constant for the bitwise op. Also, note the 10**-7 multiplier on this, i.e. I can do ~30 million (small integer) checks per second.

Here's the same plot for Python 2.7.16:

python2.7 벤치 마크

which shows the optimisation that's gone into newer versions of Python.

I've only got these versions of Python on my machine, but could rerun for other versions of there's interest. There are 51 ns between 1 and 1e100 (evenly spaced on a log scale), for each point I do the equivalent of:

timeit('n % 2', f'n={n}', number=niter) 

여기서 niter하게 계산 timeit권취 ~ 0.1 초,이 5 회 반복한다. 약간 어색한 처리는 n지역 변수보다 느린 전역 변수 조회를 벤치마킹하지 않도록하는 것입니다. 이 값의 평균은 선을 그리는 데 사용되며 개별 값은 점으로 그려집니다.


def main():
    n = float(input('odd:'))
    while n % 2 == 0:
        if n % 2 == 1:
            break
        n = float(input('odd:'))


    for i in range(int((n+1)/2)):
        print(' '*i+'*'*int((n-2*i))+' '*i)

main()

#1st part ensures that it is an odd number that was entered.2nd part does the printing of triangular


내 솔루션은 기본적으로 두 개의 문자열이 있으며 &로 올바른 색인을 얻습니다.

res = ["Even", "Odd"]
print(res[x & 1])

다른 대안보다 느리게 보입니다.

#!/usr/bin/env python3
import math
import random
from timeit import timeit

res = ["Even", "Odd"]

def foo(x):
    return res[x & 1]

def bar(x):
    if x & 1:
        return "Odd"
    return "Even"

la = lambda x : "Even" if not x % 2 else "Odd"

iter = 10000000

time = timeit('bar(random.randint(1, 1000))', "from __main__ import bar, random", number=iter)
print(time)
time = timeit('la(random.randint(1, 1000))', "from __main__ import la, random", number=iter)
print(time)
time = timeit('foo(random.randint(1, 1000))', "from __main__ import foo, random", number=iter)
print(time)

출력 :
8.05739480999182
8.170479692984372
8.892275177990086

참고 URL : https://stackoverflow.com/questions/13636640/python-checking-odd-even-numbers-and-changing-outputs-on-number-size

반응형