这是我的代码:

def retest2():
    print "Type in another chapter title! Or type \"Next\" to move on."
def primenumbers1():
    print "--------------------------------------------------\nChapters in books are usually given the cardinal numbers 1, 2, 3, 4, 5, 6 and so on.\n\nBut I have decided to give my chapters prime numbers 2, 3, 5, 7, 11, 13 and so on because I like prime numbers.\n\nType in the chapter title of my book (a prime number) and I will tell you what cardinal number the chapter is."
def primenumbers2():
    chapter = (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233)
    while True:
        prime = raw_input("\n")
        if "next"  == prime.lower() or "Next" == prime.lower():
            print "--------------------------------------------------\nOnto the next thing."
            break
        try:
            p = int(prime)
            if p in chapter:
                print "Chapter ",chapter.index(p) + 1
                retest2()
        except ValueError:  #invalid input
            print "That is not one of my chapter numbers because {0} is not a prime number found in my book. Try again.".format(prime)

        if p not in chapter:    #input is integer, but not a prime number within my range of primes
            print "That is not one of my chapter numbers because {0} is not a prime number found in my book. Try again.".format(prime)
primenumbers1()
primenumbers2()

我在考虑这个程序时问了一个类似的问题( Python –变量既是int又是str ),但是现在我遇到了两个不同的问题。 当我在while循环中输入诸如okay类的随机字符串作为我的第一个输入while ,我收到一条错误消息:

That is not one of my chapter numbers because okay is not a prime number found in my book. Try again.
Traceback (most recent call last):
  File "trial.py", line 83, in <module>
    primenumbers2()
  File "trial.py", line 80, in primenumbers2
    if p not in chapter:    #input is integer, but not a prime number within my range of primes
UnboundLocalError: local variable 'p' referenced before assignment

但是,当我在以后的输入中键入okay时,它可以工作。

另一个错误是在此循环中,如果我尚未键入素数,然后键入okay ,则输出为两行, That is not one of my chapter numbers because okay is not a prime number found in my book. Try again. That is not one of my chapter numbers because okay is not a prime number found in my book. Try again.

===============>>#1 票数:3

对于您在上面的注释中提到的第二个错误:(我尚无法注释,我不知道该如何应对)
“我按照您的建议进行了操作,并用p = None初始化了p,这很好地解决了我的第一个问题。但是,如果我输入正确,我将得到2行,即...,那可能是因为此参数同时满足了该章中的“例外”和“如果不是p ...我该如何避免呢?”

对于无效输入,您会收到此错误,因为它会第一次打印出无效输入,但是代码会继续检查p是否不在本章中,并且不会,因此它将再次打印。

您想要做的是找到某种方法,以在发生例外情况时跳过下一个if块。 知道这是无效的输入后,您就不想继续浏览章节。

在python中,您可以通过添加continue语句来做到这一点。 将其添加到ValueError的错误处理中,将使您无法继续检查章中的p是否不是无效输入。

except ValueError:  #invalid input
    print "That is ...'
    continue

您可以在此处阅读更多有关continue语句的信息,建议您在使用前先阅读! https://docs.python.org/2/reference/simple_stmts.html#continue

我还要提及的是,在python中,约定是将行数保持在80个字符以下。 它使其他编码人员更容易阅读和遵循您的代码。

===============>>#2 票数:2 已采纳

您正在try块中初始化p ,但尝试在运行except之后的代码之后使用它。 如果得到ValueError则会p was referenced before assignment 如何解决:try之前初始化p

p=None
try:
    # do smth
except:
    # do smth

===============>>#3 票数:0

当您在第一个循环中使用except ValueError: #invalid input的异常处理异常时,无需定义p

添加continue似乎更有意义:

 except ValueError:  #invalid input
     print "That is ...'
     continue

  ask by theo1010 translate from so

未解决问题?本站智能推荐:

3回复

Python - 变量既可以是int也可以是str

这是我的代码: 所以我要做的是让用户输入一个素数,输出是与该素数相关的基数。 但是,我希望用户可以通过键入"Next"或"next"来选择进入下一个功能。 因此,我的变量输入prime需要适应字符串和整数输入。 所以我将其设置为(str(input("\\n")))然后在需要时将其
3回复

如何在读取CSV文件时将字符串值转换为整数值?

打开CSV文件时,整数列将转换为字符串值('1','23'等)。 循环将这些转换回整数的最佳方法是什么? CSV文件如下: Account Value ABC 6 DEF 3 GHI 4 JKL 7
4回复

Python int / str检查

我有一个家庭作业,并且我已经完成了最少的作业,但是在进行作业时,我对如何使我的程序变得更好感兴趣。 代码的重点是绘制用户定义的形状,并在输入无效输入时提供反馈。 我想继续做下去,所以如果用户输入一个str作为高度/宽度或坐标之一,它将给出一个错误,但是我无法弄清楚该怎么做。 这是一个入门课
1回复

Python:需要高int精度的解决方案(生成素数)

目前,我尝试通过NIST(附录B3.2.1)的FIPS186-4中显示的算法来实现generate_random_prime()函数,请参见此处 。 但是由于Python的精度,步骤4.4似乎存在很大问题(如果p <sqrt(2)*(2 **((nlen / 2)-1))。 为
1回复

Python:检查(真大)素数时“ long int太大,无法转换为浮点数”

我试图从这个答案中实现第一个is_prime-function: https ://stackoverflow.com/a/17298131/6208280 但是,在测试大量数字时,我有一些问题。 对于非常高的数字,我会遇到一个溢出错误: long int too large to
1回复

我还能如何将while循环与[included function]一起使用,以仅对给定范围内的质数求和?

我正在寻找可以超出未知变量n 。 k是素数。 is_prime()是一个函数,如果参数为素数则返回True ,否则返回False 。 我尝试过的是: 随着n的值变大,我的代码开始不起作用。 我希望k仅在is_prime返回True时增加,并且total将是运行总计,确保素数之
2回复

Python素数程序不起作用

我正在创建一个Python程序来确定数字是否为质数。 这就是我所拥有的: 它适用于除2之外的所有用例。为什么? 我该如何解决?
2回复

用Python枚举查找第N个素数

我决定现在应该开始学习编码了。 我对HTML和CSS有所了解,但我希望能够为iOS开发。 我知道我还有很长的路要走,但我的目标是一步一步到达那里。 我正在通过iTunes U上的MIT Python课程进行学习,但仍无法完成作业。 我理解枚举的概念,并测试所有可能的结果以找到素数,但
1回复

Python找到Nth prime [重复]

这个问题在这里已有答案: for循环 10答案中 的python变量的范围 我正在尝试找到第n个素数,而没有查看我正在构建此函数的其他解决方案 现在,虽然它可能不是最有效的,但我想要理解的是为什么我不能将我的变量I重置为每个循环的数组的开头? 函数正确地找
2回复

Python-从素数列表中删除包含偶数的素数

我想编写一个程序,从素数列表中删除所有包含偶数的素数。 谁能解释为什么如果限制为200,则此代码返回正确的结果,但是如果限制为300,则返回错误? 其中gen_primes(limit)是一个生成器,它返回limit之下的所有素数。 如果限制= 200,则返回: 但是