Python – 让变量既是 int 又是 str
Python – Have a variable be both an int and a str
这是我的代码:
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()
以重新启动该功能。
请帮我完成这项工作!
您需要为 python2 使用 raw_input
,python2 中的 input
基本上是 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
都有一个对应于其在元组中的索引的值。
尝试使用 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()
您要做的是将用户输入的值转换为字符串或整数。如果您使用 input
,如 Padraic 所说,它等于 eval(raw_input())
,您将评估输入,因为它是一个 python 命令:如果您写入任何不存在的名称,这将引发错误.要解决此问题,请使用 raw_input
函数。它将return一个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'
这是我的代码:
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()
以重新启动该功能。
请帮我完成这项工作!
您需要为 python2 使用 raw_input
,python2 中的 input
基本上是 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
都有一个对应于其在元组中的索引的值。
尝试使用 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()
您要做的是将用户输入的值转换为字符串或整数。如果您使用 input
,如 Padraic 所说,它等于 eval(raw_input())
,您将评估输入,因为它是一个 python 命令:如果您写入任何不存在的名称,这将引发错误.要解决此问题,请使用 raw_input
函数。它将return一个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'