Essayez quelque chose comme Python for-else dans Ruby

Déclencheur

Lisez Effective Python Memo Item 12 Evitez d'utiliser des blocs else après les boucles for et while et demandez-vous comment l'écrire en Ruby. Devenu.

Choses à faire

a = 4
b = 9
for i in range(2, min(a, b) + 1):
    print('Testing', i)
    if a % i == 0 and b % i == 0:
        print('Not coprime')
        break
    else:
        print('Coprime')

La clause ʻelse` est exécutée lorsque la boucle se termine sans interruption. Ce n'est certainement pas une opération intuitive. Je ferai de mon mieux avec Ruby.

Considération

Ignorer la clause ʻelse`, dans le cas de Ruby,

a = 4
b = 9
(2..[a, b].min).each do |i|
  puts "Testing: #{i}"
  if (a % i).zero? && (b % i).zero?
    puts "Not coprime"
    break
  end
end

Ce sera. ʻEach renvoie self, donc si l'itération se termine sans break, 2 .. [a, b] c'est-à-dire, la vraie valeur est retournée, et break, nil`, c'est-à-dire Une fausse valeur est renvoyée.

Donc, si vous vous connectez avec ʻet`, cela semble fonctionner.

Conclusion

a = 4
b = 9
(2..[a, b].min).each do |i|
  puts "Testing: #{i}"
  if (a % i).zero? && (b % i).zero?
    puts "Not coprime"
    break
  end
end and puts "Coprime"

Pour le moment, ça s'est bien passé. Mais ce n'est pas beau.

Pour utiliser &&, vous devez utiliser met (" Coprime ") ou (met" Coprime ") pour renforcer la connexion entre met et" Coprime ".

prime

J'ai aussi réfléchi à la façon de faire sortir Ruby Poku.

Partie 1

a = 4
b = 9
puts (2..[a, b].min).each_with_object("Coprime") { |i|
  puts "Testing: #{i}"
  if (a % i).zero? && (b % i).zero?
    break "Not coprime"
  end
}

Partie 2

a = 4
b = 9
puts "Coprime".tap {
  (2..[a, b].min).each do |i|
    puts "Testing: #{i}"
    if (a % i).zero? && (b % i).zero?
      break "Not coprime"
    end
  end
}

Tous sont difficiles à comprendre.

Comme vous pouvez le voir dans "Python efficace", il semble préférable de découper dans une méthode sans faire quelque chose comme for-else.

def coprime?(a, b)
  (2..[a, b].min).each do |i|
    return false if (a % i).zero? && (b % i).zero?
  end
  true
end

puts coprime?(4, 9) ? "Coprime" : "Not coprime"

Recommended Posts

Essayez quelque chose comme Python for-else dans Ruby
Quelque chose comme JS setTimeout en python
Quelque chose comme tail -f en Python
Faites quelque chose comme les transactions Redis en Python
Essayez gRPC en Python
Essayez 9 tranches en Python
Essayez LINE Notify avec Python
Implémentons Yuma dans Python 3
Je veux faire quelque chose comme sort uniq en Python
Faites quelque chose comme un interpréteur Python avec Visual Studio Code
Essayez d'utiliser LevelDB avec Python (plyvel)
Essayons Fizz Buzz avec Python
Afficher des caractères comme AA en python
Essayez de calculer Trace en Python
Essayez l'accès au registre PLC en Python
Essayez d'utiliser LeapMotion avec Python
Essayez Python
Je voulais faire quelque chose comme la pipe d'Elixir en Python
Quelque chose comme 40-32 / 2 = 4!
Essayez de vous connecter à qiita avec Python
Essayez d'utiliser l'API Wunderlist en Python
Différences entre Ruby et Python dans la portée
Essayez d'utiliser l'API Kraken avec Python
Trouver des fichiers comme Linux Find en Python
Essayez de travailler avec des données binaires en Python
Essayez d'envoyer un paquet SYN en Python
Essayez de dessiner une animation simple en Python
Grande différence dans les performances de ruby, python, httpd
Référence du fichier INI en Python ou Ruby
Essayez rapidement l'API Face de Microsoft en Python
Essayez d'appeler Python depuis Ruby avec une économie
Essayez de fouiller votre journal avec Python
Essayez un tube de programmation fonctionnel en Python
Comment écrire Ruby to_s en Python
Essayez de créer quelque chose comme C # LINQ
# J'ai essayé quelque chose comme Vlookup avec Python # 2
Python en optimisation
CURL en Python
Janken en Ruby
Métaprogrammation avec Python
Premiers pas pour essayer Google CloudVision en Python
Convertir les séquences d'échappement Unicode comme \ u en Python
Python 3.3 avec Anaconda
Essayez d'implémenter Oni Mai Tsuji Miserable avec python
Géocodage en python
Calculons en fait le problème statistique avec Python
3.14 π jour, alors essayez de sortir en Python
Essayez auto pour évaluer automatiquement Enum dans Python 3.6
Méta-analyse en Python
Unittest en Python
Quand j'essaye matplotlib en Python, il dit 'cairo.Context'
Essayez d'utiliser l'API BitFlyer Ligntning en Python
Époque en Python
Discord en Python
GNU GLOBAL (gtags) + α dans Go, Ruby, Python
Allemand en Python
DCI en Python