web-dev-qa-db-ja.com

Python-奇数/偶数をチェックし、数値サイズで出力を変更する

課題を解決するにはいくつかの問題があり、少し行き詰まっています。問題は、ユーザーに奇数を入力させるプログラムを作成し(奇数であることを確認)、入力のサイズに基づいて逆さまの星のピラミッドを印刷することです。

たとえば、5を入力すると、次のようになります

*****
 ***
  *

したがって、私の問題は2つあります。

1)偶数か奇数かを確認するにはどうすればよいですか?私はif number/2 == intを試してみましたが、それが何かをするかもしれないと期待していて、インターネットはif number%2==0をするように言っていますが、それはうまくいきません。

2)各行の中央にあるアスタリスクを変更するにはどうすればよいですか?

どちらの問題でも助けていただければ幸いです。

58
keirbtre

これは宿題であるため、完全な答えを与えることはまったく意味がありません。そこで、いくつかのポインタを示します。

偶数または奇数

number % 2 == 0

間違いなくあなたの番号が偶数であるかどうかを見つけるための非常に良い方法です。

%がわからない場合、これはモジュロを行います。これは、ここでは2によるnumberの除算の残りです。 http://en.wikipedia.org/wiki/Modulo_operation

ピラミッドの印刷

最初のアドバイス:*****を出力するには、print "*" * 5を実行できます。

2番目のアドバイス:アスタリスクを中央に配置するには、アスタリスクの前に書き込むスペースの数を調べる必要があります。その後、print " "*1 + "*"*3を使用して、一連のスペースとアスタリスクを印刷できます。

86
Julien Vivenot

%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
24
Bill H

シンプルだが高速:

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

1)偶数か奇数かを確認するにはどうすればよいですか?私は「if number/2 == int」を試してみて、それが何かをするかもしれないと期待して、インターネットは「if number%2 == 0」をするように言ったが、それはうまくいかない。

def isEven(number):
        return number % 2 == 0
5
d.moncada
if number%2==0

それが偶数であることを教えてくれます。そのため、奇数がelseステートメントになります。 「%」は、除算後の剰余を返すmod記号です。したがって、本質的には、数値が2で割り切れる場合、偶数と安全に仮定できると言っています。それ以外の場合は奇妙です(完全な相関関係です!)

アスタリスクの配置については、アスタリスクの行に関連付けられたスペースの数をアスタリスクの先頭に追加します。あなたの例では

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

それに応じてスペースを空けたい

0*****
01***
012*
5
SuperFamousGuy
la = lambda x : "even" if not x % 2 else "odd"
3
T-kin-ter

最も簡単で最も基本的な方法はこれだと思います

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

基本的な条件と数学だけです。ゼロも気にしますが、これは偶数でも奇数でもありません。また、入力によって必要な数値を指定できるため、非常に可変です。

2
Eduard Žanony

私のソリューションは次のとおりです。

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

int値が奇数か偶数かを確認する方法はたくさんあります。 2つの主な方法を紹介します。

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)

それが役に立てば幸い

1
Liam

印刷については、 Format Specification Mini Language (セクション:テキストの位置合わせと幅の指定):

長さを確認したら、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 )
1
Nisan.H

命令のサンプル整数nを指定し、次の条件付きアクションを実行します:

  • Nが奇数の場合、Weirdを出力します
  • 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")
1

これは単純なコードです。あなたはそれを試して、簡単に知識をつかむことができます。

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

等々...

1
faiz

ここでのソリューションのいくつかは、さまざまな「偶数」操作、特にn % 2n & 1にかかる時間を参照しています。これは、nのサイズによってこれがどのように変化するかを体系的にチェックせず、速度を予測するものです。

簡単な答えは、適切なサイズの数値 通常<1e9 を使用している場合、それほど違いはありません。より大きな数値を使用している場合、おそらくビット演算子を使用する必要があります。

以下は、何が起こっているかを示すためのプロットです(Linux 5.1.2でのPython 3.7.3を使用)。

python3.7 benchmark

基本的に、「任意の精度」に達すると、モジュラスの処理が徐々に遅くなりますが、ビット単位の演算では一定になります。また、これに関する10**-7乗数に注意してください。つまり、1秒あたり約3,000万(小さな整数)チェックを実行できます。

Python 2.7.16の同じプロットを次に示します。

python2.7 benchmark

これは、Pythonの新しいバージョンに導入された最適化を示しています。

私のマシンにはこれらのバージョンのPythonしかありませんが、興味のある他のバージョンでも再実行できます。 1と1e100の間には51個のns(ログスケールで均等に間隔が空いています)があり、各ポイントに対して次のことを行います:

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

ここで、niterは、timeitが約0.1秒かかるように計算され、これが5回繰り返されます。 nのやや厄介な処理は、ローカル変数よりも遅いグローバル変数検索のベンチマークも行わないようにするためです。これらの値の平均は線の描画に使用され、個々の値は点として描画されます。

1
Sam Mason
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

0
user8934279