尝试使用下划线和输入来理解Python循环

时间:2016-08-28 07:10:21

标签: python loops input

还有一个提示 - 如果有人在HackerRank上学习Python,那么知道这对于开始是至关重要的。

我正在尝试理解这段代码:

    stamps = set()
    for _ in range(int(raw_input())):
        print 'underscore is', _
        stamps.add(raw_input().strip())
        print stamps

输出:

    >>>2 
    underscore is 0
    >>>first
    set(['first'])
    underscore is 1
    >>>second
    set(['second', 'first'])
  1. 我把2作为第一个原始输入。函数如何知道我只循环两次?这让我失望,因为它不是典型的......对于我在xrange(0,2)结构中。

  2. 起初我的想法是下划线重复shell中的最后一个命令。所以我在代码中添加了print语句来查看下划线的值......但是这些值只显示0和1,就像典型的循环结构一样。

  3. 我已经阅读了这篇文章,但仍然无法理解正在使用这三种下划线中的哪一种。

    What is the purpose of the single underscore "_" variable in Python?

    我刚刚开始学习Python,所以很容易理解这些简单的解释!

4 个答案:

答案 0 :(得分:10)

ncoghlan's answer列出了Python中_的3种常规用法:

  
      
  1. 将最后执行的语句的结果保存在交互式中   口译员会议。这个先例是由标准的CPython设定的   口译员和其他口译员也纷纷效仿
  2.   
  3. 用于i18n中的翻译查找(从相应的C导入)   惯例,我相信),如代码中所示:

    raise forms.ValidationError(_("Please enter a correct username"))`
    
  4.   
  5. 作为一般用途"一次性使用"变量名称表示该部分   函数结果被故意忽略,如代码所示:

     label, has_label, _ = text.partition(':')
    
  6.   

您的问题是代码中的示例中使用了哪一个。答案是一个一次性变量(案例3),但其内容打印此处用于调试目的。

然而,如果以任何方式使用其值,则使用_作为循环变量不是一般的Python约定。因此,您经常会看到:

 for _ in range(10):
     print("Hello world")

其中_立即向读者发出信号,表明该值并不重要,循环只重复10次。

但是在诸如

之类的代码中
 for i in range(10):
     do_something(i)

在使用循环变量的值时,使用变量名称(例如ij而不是_是惯例。

答案 1 :(得分:1)

下划线就像程序中的常规变量。

答案 2 :(得分:1)

对于那些试图理解下划线和输入如何在循环中工作的人 - 在花了很长时间调试和打印之后 - 这里的代码让我了解了发生了什么。

    for _ in range(int(raw_input())):
        print raw_input()

用户输入:

    2
    Dog
    Cat

输出:

    # no output despite entering 2, but 2 is set as range - loops 2 times
    Dog
    Cat

Bonus - 请注意for循环中第一行的int()转换方式如何?

第一个输入是2,所以int()转换就好了。您可以告诉现在第一行代码被忽略,因为将第二个输入'Dog'通过int()会产生错误。不能将单词转换成整数。

答案 3 :(得分:0)

您的代码

stamps = set()
for _ in range(int(raw_input())):
    print 'underscore is', _
    stamps.add(raw_input().strip())
    print stamps

与此完全相同:

how_many_loops = int(raw_input()) # asked only once.
stamps = set()
for i in range(how_many_loops):
    print 'loop count is', i
    stamps.add(raw_input().strip())
    print stamps

由于必须在循环开始之前计算您在range()中输入的内容,因此第一个int(raw_input())仅被询问一次。如果您使用for i in range(very_expensive_list)之类的东西,将花费很多时间,然后开始循环。