# 利用递归函数调用方式,将输入的5个字符,以相反顺序打印出来# str 本身提供了翻转的方法# 为了构建一个正确的递归函数,我们需要有一个不需要继续递归的基本情况,不然的话递归就变成了无限循环。# 思路: 每次取开始位置的字符,然后逆序拼接# 输入: asdfg# 如何取第一个字符:s[0], s[0:1]# 如何逆序拼接: 递归有返回值的是最深的那次调用: 最后次调用的返回值为'' # 倒数第二次调用的就是 ‘’+‘g’# 依次类推: ‘’+'g'+'f'+'d'+'s'+'a' 和在一起就是gfdsa 正好的输入的逆序defmy_reserve(s):if s =="":print('s = ""')return s
else:print(f"my_reserve(s[1:]) + s[0] = my_reserve({s[1:]}) + {s[0]}")return my_reserve(s[1:])+ s[0]
name=''try:for i inrange(5):
tmp =input(f"总共需要5个,请输入第{i+1}个字符:")iflen(tmp)>1:raise ValueError("输入的字符超长")
name += tmp
print("你输入的字符顺序是:", name)print(my_reserve(name))except ValueError as e:print("请输入如何要求的长度", e)
题目27
# 有五个人,第五人比第四人大2岁,第四比第三大2岁,以此类推,第一人10岁,求第五人的岁数# fn = fn-1 + 2 n > 1, n = 1时, f1 = 10defget_age(n):if n ==1:return10return get_age(n-1)+2for i inrange(1,6):print(f"第{i}人{get_age(i)}岁")
题目28
# 给一个不多于5位的数字,求其是几位数字,逆序打印各位数字# 将数字转为str,然后求str的长度即可defget_num_of_digits(num:int):returnlen(str(num))# 逆序defreserver(num:str):if num =='':return num
return reserver(num[1:])+ num[0]print(f"12340 是一个{get_num_of_digits(12340)}位数, 逆序输出为 : {reserver(str(12340))}")# 第二种:分别获取各个位置上的数字,由于最多5位 defget_num_of_digits1(num:int,max:int=5):"""获取数字各个位置上的数字,并逆序输出
Args:
num (int): 待解析的数字
max (int): 预期解析的长度
"""
nums =''for i inrange(len(str(num))):
tmp ='1'+'0'* i
tmp =str(num//int(tmp))
nums+= tmp[len(tmp)-1]print(f"数字{num},是一个{len(nums)}位数,逆序输出为:{nums}")
get_num_of_digits1(1234500,10)
题目29
# 判断一个5位数字是否是回文。# 中间数字的左右两边是对称的(正序与反序一样)# 第一种利用字符串切片defis_palindrome(num:int):
str_before =str(num)
str_after =str(num)[::-1]if str_before == str_after:print(f"数字{num}是回文")returnTruereturnFalse
is_palindrome(12421)
is_palindrome(12345)# 第二种利用index可以为负,代表倒数.以中间位置的元素为分界线# index 0 和index -1比较# index 1 和index -2比较defis_palindrome1(num:int):# 数字转字符串
tmp =str(num)# 获取一半的位置for i inrange(len(tmp)//2):if tmp[i]!= tmp[-i -1]:returnFalseprint(f"数字{num}是回文")returnTrue
is_palindrome1(12421)
is_palindrome1(12345)for i inrange(1002):
is_palindrome(i)
is_palindrome1(i)
题目30
# 请输入星期几的第一个字母来判断是星期几,如果第一个字母一样,则继续判断第二个字母# 思路,根据字母筛选,直到只剩一个结果。那么这个结果就是输入的
week =['monday','tuesday','wednesday','thursday','friday','saturday','sunday']defguess_day_of_week():
index =0whileTrue:try:
first =str(input(f"请输入第{index+1}个字母:"))iflen(first)>1:raise ValueError(f"请输入一个字母,当前输入{len(first)}个!!!!")ifnot first.isalpha():raise ValueError(f"请输入字母,当前输入的{first},不是字母!!!!")# 这一段是不是可以用递归实现,备选范围和比较的字母在随着调用次数变化而变化
filter1 =[]for i in week:if i[index]== first:
filter1.append(i)continueprint(f"输入的第{index+1}个字母是{first},目前的备选有{filter1}")iflen(filter1)>1:
index +=1continueeliflen(filter1)==1:print(filter1[0])return filter1[0]else:raise ValueError("请输入周一到周日的英文字母。")except ValueError as e:print(e)# guess_day_of_week()# 递归实现周几匹配defguess_day_of_week1(day_range:list,index:int=0):iflen(day_range)==1:return day_range[0]elifnotlen(day_range):print("当前输入的字母没有备选的星期几")returnNone
first =''# 这一段是确保用户输入的是一个字母whileTrue:try:
first =str(input(f"请输入第{index +1}个字母:"))iflen(first)>1:raise ValueError(f"请输入一个字母,当前输入{len(first)}个!!!!")ifnot first.isalpha():raise ValueError(f"请输入字母,当前输入的{first},不是字母!!!!")breakexcept ValueError as e:print(e)except IndexError:print("无法猜测当前输入的是周几。")# 这一段才是真正的在根据用户的输入从备选中筛选
filter1 =[]for i in day_range:if i[index]== first[0]:
filter1.append(i)continuereturn guess_day_of_week1(filter1, index +1)print(guess_day_of_week1(week))
文章目录 Joint segmentation and classification of skin lesions via a multi-task learning convolutional neural network摘要本文方法实验结果 Joint segmentation and classification of skin lesions via a multi-task learning convolutional neural network
摘要
在…