鱼C论坛

 找回密码
 立即注册
查看: 1691|回复: 9

[已解决]SyntaxError: 'break' outside the loop

[复制链接]
发表于 2022-5-11 23:39:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# This is a guess the number game.
import random

print('Hello. What is your name?')
name = input()

print('Well, ' + name + ',I am thinking a number between 1 and 20.')
secretNumber = random.randint(1,20)

# print('Debug: Secret number is ' + str(secretNumber))

for guessesTaken in range(1,7):
    print('Take a guess.')
    guess = int(input())
    try:
        if guess < secretNumber:
            print('Your guess is too low.')
        elif guess > secretNumber:
            print('Your guess is too high.')
        else:
            break # This condition is for the correct guess!
    except ValueError:
        print('You did not enter a number.')
   
if guess == secretNumber:
    print('Good job, ' + name + '! You guessed my number in ' +str(guessesTaken) +' guesses!')
else:
    print('Nope. The number I was thinking of was ' + str(secretNumber))
最佳答案
2022-5-12 07:16:34
Boibot 发表于 2022-5-11 23:52
我用pythontutor检验这段代码,指出SyntaxError: 'break' outside the loop
我用F5跑一下,抛出来
这样ex ...


这个报错是因为你 guess 那输入的是字符串 'ss' ,而 'ss' 在 try 捕获外,导致没有捕获到这个  ValueError

而且建议在循环之前对数值进行初始化,这样可以更安全的执行代码,参考代码:

  1. # This is a guess the number game.
  2. import random

  3. print('Hello. What is your name?')
  4. name = input()

  5. print('Well, ' + name + ',I am thinking a number between 1 and 20.')
  6. secretNumber = random.randint(1, 20)

  7. # print('Debug: Secret number is ' + str(secretNumber))
  8. guess = 0
  9. guessesTaken = 0
  10. for guessesTaken in range(1, 7):
  11.     print('Take a guess.')
  12.     try:
  13.         guess = int(input())
  14.         if guess < secretNumber:
  15.             print('Your guess is too low.')
  16.         elif guess > secretNumber:
  17.             print('Your guess is too high.')
  18.         else:
  19.             break  # This condition is for the correct guess!
  20.     except ValueError:
  21.         print('You did not enter a number.')

  22. if guess == secretNumber:
  23.     print('Good job, ' + name + '! You guessed my number in ' + str(guessesTaken) + ' guesses!')
  24. else:
  25.     print('Nope. The number I was thinking of was ' + str(secretNumber))
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-5-11 23:45:13 | 显示全部楼层


SyntaxError: 'break' outside the loop


这个报错主要是指你在非循环体中使用了 break 关键字

只要将 break 关键字都使用在循环内即可

你代码中并没有发现会抛出这个错误的问题

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-11 23:45:47 | 显示全部楼层
本帖最后由 isdkz 于 2022-5-11 23:47 编辑

你这个没有问题,标题那个错误是在 break 没有放在循环里面才会出现的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-11 23:52:32 | 显示全部楼层
我用pythontutor检验这段代码,指出SyntaxError: 'break' outside the loop
我用F5跑一下,抛出来
  1. line 14, in <module>
  2.     guess = int(input())
  3. ValueError: invalid literal for int() with base 10: 'ss'
复制代码

这样except ValueError等于没有设置
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-12 00:22:31 | 显示全部楼层
Twilight6 发表于 2022-5-11 23:45
这个报错主要是指你在非循环体中使用了 break 关键字

只要将 break 关键字都使用在循环内即可

请往下翻一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-12 00:23:02 | 显示全部楼层
isdkz 发表于 2022-5-11 23:45
你这个没有问题,标题那个错误是在 break 没有放在循环里面才会出现的

请往下翻一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-12 07:16:34 | 显示全部楼层    本楼为最佳答案   
Boibot 发表于 2022-5-11 23:52
我用pythontutor检验这段代码,指出SyntaxError: 'break' outside the loop
我用F5跑一下,抛出来
这样ex ...


这个报错是因为你 guess 那输入的是字符串 'ss' ,而 'ss' 在 try 捕获外,导致没有捕获到这个  ValueError

而且建议在循环之前对数值进行初始化,这样可以更安全的执行代码,参考代码:

  1. # This is a guess the number game.
  2. import random

  3. print('Hello. What is your name?')
  4. name = input()

  5. print('Well, ' + name + ',I am thinking a number between 1 and 20.')
  6. secretNumber = random.randint(1, 20)

  7. # print('Debug: Secret number is ' + str(secretNumber))
  8. guess = 0
  9. guessesTaken = 0
  10. for guessesTaken in range(1, 7):
  11.     print('Take a guess.')
  12.     try:
  13.         guess = int(input())
  14.         if guess < secretNumber:
  15.             print('Your guess is too low.')
  16.         elif guess > secretNumber:
  17.             print('Your guess is too high.')
  18.         else:
  19.             break  # This condition is for the correct guess!
  20.     except ValueError:
  21.         print('You did not enter a number.')

  22. if guess == secretNumber:
  23.     print('Good job, ' + name + '! You guessed my number in ' + str(guessesTaken) + ' guesses!')
  24. else:
  25.     print('Nope. The number I was thinking of was ' + str(secretNumber))
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-12 12:15:15 | 显示全部楼层
Twilight6 发表于 2022-5-12 07:16
这个报错是因为你 guess 那输入的是字符串 'ss' ,而 'ss' 在 try 捕获外,导致没有捕获到这个  ValueE ...

怎么改写能让try捕获'ss'异常
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-12 14:51:17 | 显示全部楼层
Twilight6 发表于 2022-5-12 07:16
这个报错是因为你 guess 那输入的是字符串 'ss' ,而 'ss' 在 try 捕获外,导致没有捕获到这个  ValueE ...

怎么改写能让try捕获'ss'异常
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-12 15:05:19 | 显示全部楼层
Boibot 发表于 2022-5-12 14:51
怎么改写能让try捕获'ss'异常

6 楼的代码就可以
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-29 04:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表