Versuchen Sie etwas wie Python für-else in Ruby

Auslösen

Lesen Sie Effective Python Memo Item 12 Vermeiden Sie die Verwendung von else-Blöcken nach for- und while-Schleifen und fragen Sie sich, wie Sie es als Ruby schreiben sollen. Wurde.

Dinge die zu tun sind

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

Die else -Klausel wird ausgeführt, wenn die Schleife ununterbrochen endet. Sicher ist es keine intuitive Bedienung. Ich werde mein Bestes mit Ruby geben.

Erwägung

Ignorieren der "else" -Klausel im Fall von 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

Es wird sein. each gibt self zurück. Wenn also die Iteration ohne break endet, 2 .. [a, b]` i. Ein falscher Wert wird zurückgegeben.

Wenn Sie sich also mit und verbinden, scheint es zu funktionieren.

Fazit

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"

Vorerst lief es gut. Aber es ist nicht schön.

Um "&&" zu verwenden, müssen Sie "Puts (" Coprime ")" oder "(Puts" Coprime ")" verwenden, um die Verbindung zwischen "Puts" und "Coprime" zu stärken.

Bonus

Ich habe auch darüber nachgedacht, wie man Ruby Poku rausholt.

Teil 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
}

Teil 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
}

Alle sind schwer zu verstehen.

Wie Sie in "Effective Python" sehen können, scheint es am besten, in eine Methode zu schneiden, ohne etwas wie "for-else" zu tun.

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

Versuchen Sie etwas wie Python für-else in Ruby
So etwas wie JS setTimeout in Python
So etwas wie tail -f in Python
Führen Sie so etwas wie Redis-Transaktionen in Python aus
Versuchen Sie gRPC in Python
Probieren Sie 9 Slices in Python aus
Versuchen Sie LINE Notify mit Python
Lassen Sie uns Yuma in Python 3 implementieren
Ich möchte so etwas wie Uniq in Python sortieren
Machen Sie so etwas wie einen Python-Interpreter mit Visual Studio Code
Versuchen Sie es mit LevelDB mit Python (plyvel)
Versuchen wir es mit Fizz Buzz mit Python
Zeigen Sie Zeichen wie AA in Python an
Versuchen Sie, Trace in Python zu berechnen
Versuchen Sie den Zugriff auf das SPS-Register in Python
Versuchen Sie es mit LeapMotion mit Python
Versuchen Sie Python
Ich wollte so etwas wie Elixirs Pipe in Python machen
So etwas wie 40-32 / 2 = 4!
Versuchen Sie, sich mit Python bei qiita anzumelden
Versuchen Sie es mit der Wunderlist-API in Python
Unterschiede zwischen Ruby und Python im Umfang
Versuchen Sie, die Kraken-API mit Python zu verwenden
Suchen Sie nach Dateien wie Linux Find in Python
Versuchen Sie, mit Binärdaten in Python zu arbeiten
Versuchen Sie, ein SYN-Paket in Python zu senden
Versuchen Sie, eine einfache Animation in Python zu zeichnen
Großer Unterschied in der Leistung von Ruby, Python und httpd
Referenz der INI-Datei in Python oder Ruby
Probieren Sie schnell die Microsoft Face API in Python aus
Versuchen Sie, Python von Ruby aus mit Sparsamkeit aufzurufen
Versuchen Sie, Ihr Tagebuch mit Python zu durchsuchen
Probieren Sie eine funktionale Programmierpipe in Python aus
Wie schreibe ich Ruby to_s in Python
Versuchen Sie etwas wie C # LINQ zu machen
# Ich habe so etwas wie Vlookup mit Python # 2 ausprobiert
Python in der Optimierung
CURL in Python
Janken in Ruby
Metaprogrammierung mit Python
Erste Schritte zum Testen von Google CloudVision in Python
Konvertieren Sie Unicode-Escape-Sequenzen wie \ u in Python
Python 3.3 mit Anaconda
Versuchen Sie, Oni Mai Tsuji Miserable mit Python zu implementieren
Geokodierung in Python
Berechnen wir das statistische Problem mit Python
3,14 π Tag, versuchen Sie also, in Python auszugeben
Versuchen Sie automatisch, Enum in Python 3.6 automatisch zu bewerten
Metaanalyse in Python
Unittest in Python
Wenn ich matplotlib in Python versuche, heißt es'cairo.Context '.
Versuchen Sie es mit der BitFlyer Ligntning API in Python
Epoche in Python
Zwietracht in Python
GNU GLOBAL (gtags) + α in Go, Ruby, Python
Deutsch in Python
DCI in Python