所以我正在尝试为类中编写一个函数,它接受一个字符串并遍历其中的每个字符,每次遇到'a''b'或'c'时它应该添加3 5和7 “值”变量(即a = 3b = 5且c = 7)。然后在字符串的末尾,我需要返回值%11的剩余部分。
这是我到目前为止所做的:
(ps.hash_func中的所有print语句都是这样,我可以看到发生了什么)
def hash_func(string):
value=0
string_length= range(len(string))
for i in (string_length):
current_charecter= string[i]
print (current_charecter)
if current_charecter== 'a':
value=value + 3
print (value)
elif current_charecter== 'b':
value=value + 5
print (value)
elif current_charecter== 'c':
value=value + 7
print (value)
elif current_charecter!= 'a' or 'b' or 'c':
value=value+0
else:
value=value%11
print (value)
print(hash_func("banana")) #this is the call to the function that is given by the grader, it should equal 3
并且功能返回:
b
5
a
8
n
a
11
n
a
14
None
(它只返回没有额外打印语句的“无”)
所以我知道它正在添加值并正确地跳过不是b或c的字母,我似乎无法弄清楚“无”的来源。
据我所知,当一个函数或变量不包含任何内容时,返回none值,所以我不确定为什么在我的函数执行所有(大多数)正确后返回它。
如果有人能破译我的代码并告诉我我犯的愚蠢错误,我将非常感激!
答案 0 :(得分:2)
您的问题的答案,您的函数不返回任何内容,因此默认返回None
。
另请注意您的代码错误,这里是解释
def hash_func(string):
value = 0
# It will iterate over the chars in the string and set ch to each char in
# turn
for ch in string:
if ch == 'a':
value += 3 # same thing as value = value + 3
elif ch == 'b':
value += 5
elif ch == 'c':
value += 7
print(ch, value)
# You don't need this and it's wrong also (note 1)
# elif ch != 'a' or 'b' or 'c':
# value += 0
# After you've iterated over the string, only then do you modulo it.
# Otherwise you're performing a modulo every time you run into a character
# that's not 'a', 'b' or 'c'
return "Hash is " + str(value % 11)
print(hash_func("banana"))
注1 :如果您有if statement
,则可以使用else
匹配与之前条件不匹配的任何内容。如果您检查是否ch == 'a'
,则无需检查ch != 'a'
。
另外,做
ch == 'a' or X or Y
不符合你的想法。
它实际做的是
is ch equal to 'a'? Yes, ok condition is true
otherwise, is X true? or condition is true
otherwise, is Y true? or condition is true
otherwise condition is false
请参阅https://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not
如果您想检查ch is one of 'a', 'b', or 'c')
是否可以使用ch in ('a', 'b', 'c')
另外供您参考,
def better_hash_func(string):
values = {'a': 3,
'b': 5,
'c': 7}
value = 0
for ch in string:
if (ch in values.keys()):
value += values[ch]
return "Hash is " + str(value % 11)
def even_better_hash_func(string):
values = {'a': 3,
'b': 5,
'c': 7}
# We use the sum function to sum the list
value = sum(
[values[ch] # This is list comprehension
for ch in string # It create a list, by iterating over
if ch in values.keys() # some iterable (like a list)
] # This is very similar to a for loop,
) # but it takes a value you produce each
# iteration and adds that
# to a new list that is returned by the
# list comprehension.
return "Hash is " + str(value % 11)
有关列表理解的更多信息:http://www.pythonforbeginners.com/basics/list-comprehensions-in-python
答案 1 :(得分:0)
它返回None
因为它不返回任何其他内容。停止打印返回值。