如何让我的函数在 python 中区分输入 'I' 和 'II'?
How do I get my function to differentiate between input 'I' and 'II' in python?
我的目标是让用户在 I 和 V 之间输入两个罗马数字并将它们相加。我想以十进制值及其等价的罗马数字显示方程式。
但是,每当我输入 I 和 V 以外的值时,该值都会被分配 'NoneType',并且程序会失败。我试过将 returns 设置为 str() 然后稍后调用 int() ,设置 roman num 是 '': num_value = # 然后在最后返回 num_value ,但是none 成功了。
我想我遗漏了一些非常基本的东西,它与区分具有重复字符的值有关,例如 'I' (没问题)和 'II' 被分配 NoneType .
firstNumeral = input("please enter a roman numeral between I and V: ")
secondNumeral = input('please enter a second roman numeral between I and V: ')
def get_user_num(roman_num):
if roman_num is 'I':
return int(1)
elif roman_num is 'II':
return int(2)
elif roman_num is 'III':
return int(3)
elif roman_num is 'IV':
return int(4)
elif roman_num is 'V':
return int(5)
elif roman_num is 'VI':
return int(6)
elif roman_num is 'VII':
return int(7)
elif roman_num is 'VIII':
return int(8)
elif roman_num is 'IX':
return int(9)
elif roman_num is 'X':
return int(10)
firstNumber = get_user_num(firstNumeral)
secondNumber = get_user_num(secondNumeral)
totalNumber = firstNumber + secondNumber
def get_roman_number(result_number):
if result_number == 1:
return "I"
elif result_number == 2:
return "II"
elif result_number == 3:
return 'III'
elif result_number == 4:
return 'IV'
elif result_number == 5:
return 'V'
elif result_number == 6:
return 'VI'
elif result_number == 7:
return 'VII'
elif result_number == 8:
return 'VIII'
elif result_number == 9:
return 'IX'
elif result_number == 10:
return 'X'
totalNumeral = get_roman_number(totalNumber)
print('Decimal values {} + {} = {}'.format(firstNumber,secondNumber, totalNumber))
print('Roman Numeral values {} + {} = {}'.format(firstNumeral, secondNumeral, totalNumeral))
当使用 I 和 V 以外的任何值时,我得到
Traceback (most recent call last):
File ... line 26, in <module>
totalNumber = firstNumber + secondNumber
TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'''
firstNumeral = input("please enter a roman numeral between I and V: ")
secondNumeral = input('please enter a second roman numeral between I and V: ')
def get_user_num(roman_num):
if roman_num is 'I':
return int(1)
elif roman_num == 'II':
return int(2)
elif roman_num == 'III':
return int(3)
elif roman_num == 'IV':
return int(4)
elif roman_num == 'V':
return int(5)
elif roman_num is 'VI':
return int(6)
elif roman_num == 'VII':
return int(7)
elif roman_num == 'VIII':
return int(8)
elif roman_num == 'IX':
return int(9)
elif roman_num == 'X':
return int(10)
firstNumber = get_user_num(firstNumeral)
secondNumber = get_user_num(secondNumeral)
print(secondNumber)
totalNumber = firstNumber + secondNumber
def get_roman_number(result_number):
if result_number == 1:
return "I"
elif result_number == 2:
return "II"
elif result_number == 3:
return 'III'
elif result_number == 4:
return 'IV'
elif result_number == 5:
return 'V'
elif result_number == 6:
return 'VI'
elif result_number == 7:
return 'VII'
elif result_number == 8:
return 'VIII'
elif result_number == 9:
return 'IX'
elif result_number == 10:
return 'X'
totalNumeral = get_roman_number(totalNumber)
print('Decimal values {} + {} = {}'.format(firstNumber,secondNumber, totalNumber))
print('Roman Numeral values {} + {} = {}'.format(firstNumeral, secondNumeral, totalNumeral))
使用'=='检查条件
您的 get_user_num(roman_num)
函数有一些问题,如前所述,您需要使用“==”而不是 is。
此外,您没有故障保护装置,因此如果用户输入非法内容,None 将被 returned,这会破坏您的代码。一个快速解决这个问题的方法是在函数末尾添加 return get_user_num(input("please enter a roman numeral between I and V: "))
行:
def get_user_num(roman_num):
if roman_num == 'I':
return int(1)
if roman_num == 'II':
return int(2)
if roman_num == 'III':
return int(3)
if roman_num == 'IV':
return int(4)
if roman_num == 'V':
return int(5)
if roman_num == 'VI':
return int(6)
if roman_num == 'VII':
return int(7)
if roman_num == 'VIII':
return int(8)
if roman_num == 'IX':
return int(9)
if roman_num == 'X':
return int(10)
return get_user_num(input("please enter a roman numeral between I and V: "))
您也可以使用 if
而不是 elif
,因为如果满足任何条件,该函数将 return。不过,如果您计划扩展到 10 以上,我建议采用更简洁的方法和更强大的算法。
我的目标是让用户在 I 和 V 之间输入两个罗马数字并将它们相加。我想以十进制值及其等价的罗马数字显示方程式。
但是,每当我输入 I 和 V 以外的值时,该值都会被分配 'NoneType',并且程序会失败。我试过将 returns 设置为 str() 然后稍后调用 int() ,设置 roman num 是 '': num_value = # 然后在最后返回 num_value ,但是none 成功了。
我想我遗漏了一些非常基本的东西,它与区分具有重复字符的值有关,例如 'I' (没问题)和 'II' 被分配 NoneType .
firstNumeral = input("please enter a roman numeral between I and V: ")
secondNumeral = input('please enter a second roman numeral between I and V: ')
def get_user_num(roman_num):
if roman_num is 'I':
return int(1)
elif roman_num is 'II':
return int(2)
elif roman_num is 'III':
return int(3)
elif roman_num is 'IV':
return int(4)
elif roman_num is 'V':
return int(5)
elif roman_num is 'VI':
return int(6)
elif roman_num is 'VII':
return int(7)
elif roman_num is 'VIII':
return int(8)
elif roman_num is 'IX':
return int(9)
elif roman_num is 'X':
return int(10)
firstNumber = get_user_num(firstNumeral)
secondNumber = get_user_num(secondNumeral)
totalNumber = firstNumber + secondNumber
def get_roman_number(result_number):
if result_number == 1:
return "I"
elif result_number == 2:
return "II"
elif result_number == 3:
return 'III'
elif result_number == 4:
return 'IV'
elif result_number == 5:
return 'V'
elif result_number == 6:
return 'VI'
elif result_number == 7:
return 'VII'
elif result_number == 8:
return 'VIII'
elif result_number == 9:
return 'IX'
elif result_number == 10:
return 'X'
totalNumeral = get_roman_number(totalNumber)
print('Decimal values {} + {} = {}'.format(firstNumber,secondNumber, totalNumber))
print('Roman Numeral values {} + {} = {}'.format(firstNumeral, secondNumeral, totalNumeral))
当使用 I 和 V 以外的任何值时,我得到
Traceback (most recent call last):
File ... line 26, in <module>
totalNumber = firstNumber + secondNumber
TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'''
firstNumeral = input("please enter a roman numeral between I and V: ")
secondNumeral = input('please enter a second roman numeral between I and V: ')
def get_user_num(roman_num):
if roman_num is 'I':
return int(1)
elif roman_num == 'II':
return int(2)
elif roman_num == 'III':
return int(3)
elif roman_num == 'IV':
return int(4)
elif roman_num == 'V':
return int(5)
elif roman_num is 'VI':
return int(6)
elif roman_num == 'VII':
return int(7)
elif roman_num == 'VIII':
return int(8)
elif roman_num == 'IX':
return int(9)
elif roman_num == 'X':
return int(10)
firstNumber = get_user_num(firstNumeral)
secondNumber = get_user_num(secondNumeral)
print(secondNumber)
totalNumber = firstNumber + secondNumber
def get_roman_number(result_number):
if result_number == 1:
return "I"
elif result_number == 2:
return "II"
elif result_number == 3:
return 'III'
elif result_number == 4:
return 'IV'
elif result_number == 5:
return 'V'
elif result_number == 6:
return 'VI'
elif result_number == 7:
return 'VII'
elif result_number == 8:
return 'VIII'
elif result_number == 9:
return 'IX'
elif result_number == 10:
return 'X'
totalNumeral = get_roman_number(totalNumber)
print('Decimal values {} + {} = {}'.format(firstNumber,secondNumber, totalNumber))
print('Roman Numeral values {} + {} = {}'.format(firstNumeral, secondNumeral, totalNumeral))
您的 get_user_num(roman_num)
函数有一些问题,如前所述,您需要使用“==”而不是 is。
此外,您没有故障保护装置,因此如果用户输入非法内容,None 将被 returned,这会破坏您的代码。一个快速解决这个问题的方法是在函数末尾添加 return get_user_num(input("please enter a roman numeral between I and V: "))
行:
def get_user_num(roman_num):
if roman_num == 'I':
return int(1)
if roman_num == 'II':
return int(2)
if roman_num == 'III':
return int(3)
if roman_num == 'IV':
return int(4)
if roman_num == 'V':
return int(5)
if roman_num == 'VI':
return int(6)
if roman_num == 'VII':
return int(7)
if roman_num == 'VIII':
return int(8)
if roman_num == 'IX':
return int(9)
if roman_num == 'X':
return int(10)
return get_user_num(input("please enter a roman numeral between I and V: "))
您也可以使用 if
而不是 elif
,因为如果满足任何条件,该函数将 return。不过,如果您计划扩展到 10 以上,我建议采用更简洁的方法和更强大的算法。