这是我的代码:

def retest2():
    print "Type in another chapter title! Or type \"Next\" to move on."
    primenumbers2()
def primenumbers1():
    print "--------------------------------------------------\nChapters in books are usually given the cardinal numbers 1, 2, 3, 4, 5, 6 and so on.\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():
    prime = (str(input("\n")))
    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)

    if "Next" in prime or "next" in prime:
        print "--------------------------------------------------\nOnto the next thing."
    elif int(prime) in chapter:
        print "Chapter ",chapter.index(int(prime)) + 1
        retest2()
    elif prime.isalpha:
        print "That is not one of my chapter numbers because {0} is not a prime number. Try again.".format(prime)
        primenumbers2()

primenumbers1()
primenumbers2()

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

一切都很好,除非字符串输入是"Next""next" 例如,如果我输入“okay”,我收到错误消息:

File "prime.py", line x, in primenumbers2
    prime = (str(input("\n")))
  File "<string>", line 1, in <module>
NameError: name 'okay' is not defined

但是,如果我输入“4”,这不是素数,程序可以正常工作,我得到:

That is not one of my chapter numbers because 4 is not a prime number. Try again.

程序循环回到primenumbers2()以重启该函数。

请帮我做这个工作!

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

您需要使用raw_input为python2, input在python2基本eval(raw_input())当你有没有变okay定义你的错误。

In [10]: prime = (str(input("\n")))

foo
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-10-15ff4b8b32ce> in <module>()
----> 1 prime = (str(input("\n")))

<string> in <module>()

NameError: name 'foo' is not defined    
In [11]: foo = 1 
In [12]: prime = (str(input("\n")))
foo
In [13]: prime = (raw_input("\n"))
next
In [14]: print prime
next

你应该很少使用input

您还应该使用while循环,如下所示:

 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 = input("Type in another chapter title! Or type \"Next\" to move on.")
        if "next"  == prime.lower():
            print("--------------------------------------------------\nOnto the next thing.")
            break
        try:
            p = int(prime)
            if p in chapter:
                print("Chapter {}".format(chapter.index(p) + 1))
            else:
                 print("That is not one of my chapter numbers because {0}"
                  " is not a prime number. Try again.".format(prime))
        except ValueError:
            print("Invalid input")

不完全确定你想要做什么但是使用一段时间,检查用户输入是否等于next ,如果没有尝试使用try / except转换为int是一个更好的主意。

使章节成为一个词典也是一个更好的主意,按键访问章节号:

def primenumbers2():
    chaps = (
        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)

    chapter = dict(zip(chaps, range(1, len(chaps) + 1)))
    while True:
        prime = input("Type in another chapter title! Or type \"Next\" to move on.")
        if "next" == prime.lower():
            print("--------------------------------------------------\nOnto the next thing.")
            break
        try:
            p = int(prime)
            if p in chapter:
                print("Chapter {}".format(chapter[p]))
            else:
                print("That is not one of my chapter numbers because {}"
                      " is not a prime number. Try again.".format(prime))
        except ValueError:
            print("Invalid input")

range(1, len(chaps) + 1))意味着章节中的每个p将具有与其元组中的索引相对应的值。

===============>>#2 票数:1

您要做的是将用户输入的值转换为字符串或int。 如果你使用input ,就像Padraic所说的那样等于eval(raw_input()) ,你将评估输入,因为它是一个python命令:如果你写任何不存在的名字,这将抛出一个错误。 要解决此问题,请使用raw_input函数。 它将返回一个str对象,即输入文本。

然后,您要查找此文本是数字还是字符串。 一种解决方案是使用例外:

try:
    prime = int(prime)

    # Here the code assuming prime is a number, an `int`
except ValueError:
    # here the code assuming prime is a string, `str`, for example
    # 'Next', 'next' or 'okay'

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

尝试使用isdigit来避免异常:

def primenumbers2():
prime = (str(input("\n")))
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)

if "Next" in prime or "next" in prime:
    print "--------------------------------------------------\nOnto the next thing."
elif prime.isdigit() and int(prime) in chapter:
    print "Chapter ",chapter.index(int(prime)) + 1
    retest2()
else:
    print "That is not one of my chapter numbers because {0} is not a prime number. Try again.".format(prime)
    primenumbers2()

  ask by theo1010 translate from so

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

3回复

Python – UnboundLocalError:分配前引用了局部变量'p'。 While循环根据我输入的时间提供不同的输出

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

确定随机Int是否为质数

当我需要确定数字x是否是质数时,我有一个小问题。 x将是随机生成的正整数,执行代码时会收到以下消息: 我的代码: 我希望while循环遍历n == 2直到n ==(x-1),但似乎没有做到! 我究竟做错了什么?
2回复

将Python变量区分为str或int

我有一个文件,每行具有3个值。 这是一个相当随机的文件,这些值中的任何一个都可以是str或int。 因此,我读了这一行,并使用split获得了第一个值: 到现在为止还挺好。 当我尝试处理变量a时,我会陷入困境。 如果它是str或int,我需要以不同的方式处理它。 我尝
4回复

Python int / str检查

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

str转换为int Python 3

我试图使int充满输入的列表中的所有元素。 我尝试了这个选项,并且其中的任何一个都在起作用。 返回是这个(只是第一项是int): 我也试过这个: 但它返回此错误:
2回复

在它们的int值之后排序一个str(Python,JSON)

首先,很抱歉,如果标题误导了我,我对该术语了解不多。 :/ 我的代码的简化版本: 输出为: 现在,我想按p的值对该输出进行排序。 (数字越大,输出越高。有点像足球中的图表)所以我想要输出: 我希望它是自动化的,所以我不只是想写 在我的原始代码中,不仅有三
1回复

Python Pandas DataFrame:不可共享的类型:str()> int()

我已经下载了“用于数据分析的Python”一书中提到的文件,并且正在浏览第278页中提到的示例FEC数据库。运行命令时出现以下类型错误。 我的版本:Python 3.4; 熊猫:0.14.0。 操作系统:Windows 8 但它不仅仅是这个数据集。 我正在使用的任何数据集都有类似
2回复

使用str()在Python中转换int()中的数字

有人可以解释我为什么我应该首先将数字转换为字符串,以便将其转换为整数。 以下是代码示例: