L'équivalent de Python de && (logique-et) dans une instruction if


Voici mon code:

# F. front_back
# Consider dividing a string into two halves.
# If the length is even, the front and back halves are the same length.
# If the length is odd, we'll say that the extra char goes in the front half.
# e.g. 'abcde', the front half is 'abc', the back half 'de'.
# Given 2 strings, a and b, return a string of the form
#  a-front + b-front + a-back + b-back
def front_back(a, b):
  # +++your code here+++
  if len(a) % 2 == 0 && len(b) % 2 == 0:
    return a[:(len(a)/2)] + b[:(len(b)/2)] + a[(len(a)/2):] + b[(len(b)/2):] 
  else:
    #todo! Not yet done. :P
  return

Je reçois une erreur dans l'IF conditionnel. Qu'est-ce que je fais mal?



Answers



Vous voudriez and au lieu de && .




Python utilise and et or conditionnels.

c'est à dire

if foo == 'abc' and bar == 'bac' or zoo == '123':
  # do something



Deux commentaires:

  • Utilisez and et or pour les opérations logiques en Python.
  • Utilisez 4 espaces pour indenter au lieu de 2. Vous vous remercierez plus tard car votre code ressemblera à peu près au code de tout le monde. Voir PEP 8 pour plus de détails.



Je suis allé avec une solution purement mathématique:

def front_back(a, b):
  return a[:(len(a)+1)//2]+b[:(len(b)+1)//2]+a[(len(a)+1)//2:]+b[(len(b)+1)//2:]



Probablement ce n'est pas le meilleur code pour cette tâche, mais travaille -

def front_back(a, b):

 if len(a) % 2 == 0 and len(b) % 2 == 0:
    print a[:(len(a)/2)] + b[:(len(b)/2)] + a[(len(a)/2):] + b[(len(b)/2):]

 elif len(a) % 2 == 1 and len(b) % 2 == 0:
    print a[:(len(a)/2)+1] + b[:(len(b)/2)] + a[(len(a)/2)+1:] + b[(len(b)/2):] 

 elif len(a) % 2 == 0 and len(b) % 2 == 1:
     print a[:(len(a)/2)] + b[:(len(b)/2)+1] + a[(len(a)/2):] + b[(len(b)/2)+1:] 

 else :
     print a[:(len(a)/2)+1] + b[:(len(b)/2)+1] + a[(len(a)/2)+1:] + b[(len(b)/2)+1:]



Vous utilisez and et or pour effectuer des opérations logiques comme en C, C ++. Comme littéralement and est && et or est || .

Jetez un oeil à cet exemple amusant,

Dites que vous voulez construire des portes logiques en Python:

def AND(a,b):
    return (a and b) #using and operator

def OR(a,b):
    return (a or b)  #using or operator

Maintenant, essayez de les appeler:

print AND(False, False)
print OR(True, False)

Cela va produire:

False
True

J'espère que cela t'aides!




peut-être avec & à la place% est plus rapide et conserve la lisibilité

autres tests pairs / impairs

x est même? x% 2 == 0

x est impair? pas x% 2 == 0

peut-être est plus clair avec bitwise et 1

x est impair? x & 1

x est même? pas x & 1 (pas impair)

def front_back(a, b):
    # +++your code here+++
    if not len(a) & 1 and not len(b) & 1:
        return a[:(len(a)/2)] + b[:(len(b)/2)] + a[(len(a)/2):] + b[(len(b)/2):] 
    else:
        #todo! Not yet done. :P
    return



Utilisation de "et" en conditionnel. J'utilise souvent ceci lors de l'importation dans Jupyter Notebook:

def find_local_py_scripts():
    import os # does not cost if already imported
    for entry in os.scandir('.'):
        # find files ending with .py
        if entry.is_file() and entry.name.endswith(".py") :
            print("- ", entry.name)
find_local_py_scripts()

-  googlenet_custom_layers.py
-  GoogLeNet_Inception_v1.py