Ruby的宇宙飞船运营商给出了相反的结果

时间:2015-10-25 20:19:29

标签: ruby

比较这些字符串时

book_1 = "A Wrinkle in Time"
book_2 = "A Brief History of Time"

book_1 <=> book_2 #=> 1

我得到1令我感到困惑,因为doc说:

  

如果字符串长度不同,并且字符串在比较最短长度时相等,则认为较长的字符串大于较短的字符串。

示例代码:

"abcdef" <=> "abcde"     #=> 1
"abcdef" <=> "abcdef"    #=> 0
"abcdef" <=> "abcdefg"   #=> -1
"abcdef" <=> "ABCDEF"    #=> 1

答案不应该是-1,因为右边的字符串更长了吗?

3 个答案:

答案 0 :(得分:3)

这是您案件中的关键:

  

并且在与最短长度进行比较时字符串相等

字符串A Wrinkle in TimeA Brief History of Time完全不相同,它们开始在第3个符号(W来自Wrinkle vs B来自{{{ 1}})和Brief&gt; W你获得B,即第一个字符串大于第二个字符串。

答案 1 :(得分:1)

你误解了。它是1,因为book_1 3 rd 字符W大于3 rd 字符B { {1}}。这就是为什么即使它们的长度不同,但和字符串相等,直到最短的长度不能保持。 - 这符合记录。

当您有book2-1时,

"abcdef"就是答案。现在看,左手字符串字符与较长字符的字符"abcdefg"相同。然后右手字符串包含更多字符,这使得"abcdef"的输出为"abcdef" <=> "abcdefg"。 - 这符合记录。

答案 2 :(得分:0)

found = false
while found == False:
    print("Guess the hidden number between 1 and 100")
    guess = int(input("Enter your guess:\n")

    if guess==67:
        print("Correct Well Done")
        found = True
    elif guess<67:
        print("Your guess is too low. Try again.")
    else guess>67:
        print("Your guess is too high. Try again.")

在您的示例中,字符串对于较短字符串的整个长度都不相同。 Ruby的排序将比较第二个索引的字符&#34; W&#34; &LT; =&GT; &#34; B&#34;在这种情况下&#34; B&#34;小于&#34; W&#34;。