【问题标题】:Python indentation - simple errorPython缩进 - 简单错误
【发布时间】:2017-04-06 03:47:03
【问题描述】:

对 python 来说是全新的,我遇到了一些我无法解释的东西,更不用说用语言来找到可能的答案了。我做了一个小抛硬币程序:

import random

print("I will flip a coin 1000 times")
input()

flips = 0
heads = 0

while flips < 1000:
    if random.randint(0, 1) == 1:
        heads = heads + 1
        flips = flips + 1

print()
print("Out of 1000 coin tosses, heads came up " + str(heads) + " times!")

这个版本的程序不行,它告诉我翻转1000次后,每次都有1000个正面。

import random

print("I will flip a coin 1000 times")
input()

flips = 0
heads = 0

while flips < 1000:
    if random.randint(0, 1) == 1:
        heads = heads + 1
    flips = flips + 1

print()
print("Out of 1000 coin tosses, heads came up " + str(heads) + " times!")

这个版本的程序可以完美运行,但是请注意我已经更改了 while 循环中“翻转”的缩进。 谁能告诉我这是为什么?提前致谢!

【问题讨论】:

  • 在第一种情况下,flips = flips + 1 仅在条件 if random.randint(0, 1) == 1 为 True 时完成。
  • 缩进意味着flips = flips + 1 现在不在if 条件之外。在其他语言中,您经常会看到括号用于表示 if 条件在 true/false 时会做什么

标签: python indentation


【解决方案1】:

那是因为如果那个“翻转”行在if 中,那么它只会在它是正面时执行。因此,您的掷硬币计数仅在正面朝上时才会增加,因此当 flips 达到 1000 次时,这意味着您已经执行了 if 1000 次并获得了 1000 次正面。

(当你得到一个尾巴时,flips 不会增加,循环继续进行,没有任何反应)

【讨论】:

    【解决方案2】:

    Python 语言依赖于缩进。与大多数基于 C 的语言不同,它使用缩进来分隔块。

    所以你的两个脚本有不同的语义:

    if random.randint(0, 1) == 1:
        heads = heads + 1
        flips = flips + 1
    

    ...如果条件为真,则增加两个变量。

    if random.randint(0, 1) == 1:
        heads = heads + 1
    flips = flips + 1
    

    ...仅当条件为 True 时才会递增 heads,并且始终递增 flips

    【讨论】:

      猜你喜欢
      • 2016-05-16
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多