Python - 基于 input() 数据类型执行不同的任务
Python - Performing different tasks based input() data-type
编辑:
post 与 Asking the user for input until they give a valid response 不同,因为我没有根据响应的数据类型结束循环。字符串和整数都有效。只有当两个条目是 不同的 数据类型时,循环才应该回滚。
我正在尝试通过 input() 收集两个单词或两个整数。 如果两个值都是整数我想计算answer1**answer2.
如果两个都是非整数我想连接字符串。最后,如果数据类型不匹配,我想将用户发送到开头以输入两个新值。
这是我的尝试。对于您即将看到的内容,我提前表示歉意。
## collect first value
print("Please type a word or an integer:")
answer1 = input()
## check for blanks
if answer1 == "":
print("Blank space detected. Please retry.")
answer1 = input()
## collect second value
print("Please type another word or integer:")
answer2 = input()
## check for blanks
if answer2 == "":
print("Blank space detected. Please retry.")
answer2 = input()
## define test for integer status
def containsInt(intTest):
try:
int(intTest)
return True
except ValueError:
pass
## check for matching data types and produce final value
if containsInt(answer1) == True:
containsInt(answer2)
if containsInt(answer2) == True:
finalInt = (int(answer1))**(int(answer2))
print("\n")
print(finalInt)
else:
print("Sorry, the data types must match - both words or integers.")
continue
else:
containsInt(answer2)
if containsInt(answer2) !=True:
print("\n")
print(answer1 + answer2)
else:
print("Sorry, the data types must match - both words or integers.")
continue
我试着用“continue”让它回到开头,但它对我很生气。您可能会说我是一个完全的新手,这是我的第一个 post。请不要对我太过苛刻。 :(
continue
只适用于循环,即 for
和 while
。您正在尝试在循环之外使用 continue
,这就是 Python 不喜欢它的原因。
您可以做的一件事是检查数据类型是否匹配,然后基于此做一些事情:
if type(answer1) == type(answer2):
if isinstance(answer1, str):
# do string stuff
elif isinstance(answer1, int) or isinstance(answer1, float):
# do calculations
else:
# types match but are not strings or numbers
else:
# types don't match, react accordingly
默认情况下Python将输入视为string
s,所以即使给输入一个数字,它也是string
类型的。您可以通过多种方式解决这个问题,其中之一就是您尝试将输入转换为数字。在这种情况下,float
比 int
效果更好,否则你无法很好地处理小数。示例:
answer1 = input()
try:
answer1 = float(answer)
except:
pass
这样做的目的是尝试将默认的字符串输入转换为浮点数,如果这不起作用,则它会保留为字符串。
这应该有效:
while True:
answer1 = input("Please type a word or an integer:")
# check for blanks
while answer1 == "":
answer1 = input("Blank space detected. Please retry.")
try:
answer1 = int(answer1)
except ValueError:
pass
answer2 = input("Please type another word or integer:")
# check for blanks
while answer2 == "":
answer2 = input("Blank space detected. Please retry.")
try:
answer2 = int(answer2)
except ValueError:
pass
if type(answer1) == type(answer2):
if type(answer1) == str:
print(answer1 + answer2)
break
elif type(answer1) == int:
print(answer1**answer2)
break
else:
print(f"Sorry, the data types of '{answer1}' and '{answer2}' do not match.")
continue
请注意,如果您输入 1.5
之类的数字,它将被视为字符串。
所以输入 1.5
和 a
将导致 1.5a
编辑: post 与 Asking the user for input until they give a valid response 不同,因为我没有根据响应的数据类型结束循环。字符串和整数都有效。只有当两个条目是 不同的 数据类型时,循环才应该回滚。
我正在尝试通过 input() 收集两个单词或两个整数。 如果两个值都是整数我想计算answer1**answer2.
如果两个都是非整数我想连接字符串。最后,如果数据类型不匹配,我想将用户发送到开头以输入两个新值。
这是我的尝试。对于您即将看到的内容,我提前表示歉意。
## collect first value
print("Please type a word or an integer:")
answer1 = input()
## check for blanks
if answer1 == "":
print("Blank space detected. Please retry.")
answer1 = input()
## collect second value
print("Please type another word or integer:")
answer2 = input()
## check for blanks
if answer2 == "":
print("Blank space detected. Please retry.")
answer2 = input()
## define test for integer status
def containsInt(intTest):
try:
int(intTest)
return True
except ValueError:
pass
## check for matching data types and produce final value
if containsInt(answer1) == True:
containsInt(answer2)
if containsInt(answer2) == True:
finalInt = (int(answer1))**(int(answer2))
print("\n")
print(finalInt)
else:
print("Sorry, the data types must match - both words or integers.")
continue
else:
containsInt(answer2)
if containsInt(answer2) !=True:
print("\n")
print(answer1 + answer2)
else:
print("Sorry, the data types must match - both words or integers.")
continue
我试着用“continue”让它回到开头,但它对我很生气。您可能会说我是一个完全的新手,这是我的第一个 post。请不要对我太过苛刻。 :(
continue
只适用于循环,即 for
和 while
。您正在尝试在循环之外使用 continue
,这就是 Python 不喜欢它的原因。
您可以做的一件事是检查数据类型是否匹配,然后基于此做一些事情:
if type(answer1) == type(answer2):
if isinstance(answer1, str):
# do string stuff
elif isinstance(answer1, int) or isinstance(answer1, float):
# do calculations
else:
# types match but are not strings or numbers
else:
# types don't match, react accordingly
默认情况下Python将输入视为string
s,所以即使给输入一个数字,它也是string
类型的。您可以通过多种方式解决这个问题,其中之一就是您尝试将输入转换为数字。在这种情况下,float
比 int
效果更好,否则你无法很好地处理小数。示例:
answer1 = input()
try:
answer1 = float(answer)
except:
pass
这样做的目的是尝试将默认的字符串输入转换为浮点数,如果这不起作用,则它会保留为字符串。
这应该有效:
while True:
answer1 = input("Please type a word or an integer:")
# check for blanks
while answer1 == "":
answer1 = input("Blank space detected. Please retry.")
try:
answer1 = int(answer1)
except ValueError:
pass
answer2 = input("Please type another word or integer:")
# check for blanks
while answer2 == "":
answer2 = input("Blank space detected. Please retry.")
try:
answer2 = int(answer2)
except ValueError:
pass
if type(answer1) == type(answer2):
if type(answer1) == str:
print(answer1 + answer2)
break
elif type(answer1) == int:
print(answer1**answer2)
break
else:
print(f"Sorry, the data types of '{answer1}' and '{answer2}' do not match.")
continue
请注意,如果您输入 1.5
之类的数字,它将被视为字符串。
所以输入 1.5
和 a
将导致 1.5a