(1)分别用选择排序法和冒泡排序法对9个数进行从大到小的排序。样例:num = [34,65,28,7,15,3,55,566,0]。
def selection_sort(nums):
n = len(nums)
for i in range(n - 1):
max_index = i
for j in range(i + 1, n):
if nums[j] > nums[max_index]:
max_index = j
if max_index != i:
nums[i], nums[max_index] = nums[max_index], nums[i]
# 测试样例
num = [34, 65, 28, 7, 15, 3, 55, 566, 0]
selection_sort(num)
print("选择排序后的结果:", num)
def bubble_sort(nums):
n = len(nums)
for i in range(n - 1):
for j in range(n - i - 1):
if nums[j] < nums[j + 1]:
nums[j], nums[j + 1] = nums[j + 1], nums[j]
# 测试样例
num = [34, 65, 28, 7, 15, 3, 55, 566, 0]
bubble_sort(num)
print("冒泡排序后的结果:", num)
(2)健康食谱输出。列出5种不同的食材,输出它们可能组成的所有菜式名称。例如:sc=[‘西红柿’,‘花椰菜’,‘黄瓜’,‘牛排’,‘虾仁’]
sc = ['西红柿', '花椰菜', '黄瓜', '牛排', '虾仁']
# 使用嵌套循环生成菜式名称
dish_names = []
for i in range(len(sc)):
for j in range(i + 1, len(sc)):
dish_name = sc[i] + sc[j]
dish_names.append(dish_name)
print("可能的菜式名称:", dish_names)
(3) 实现输入以下五个国家的名称并按字母顺序排列输出。 China America Germany Italian Australia
countries = ['China', 'America', 'Germany', 'Italian', 'Australia']
sorted_countries = sorted(countries)
print("按字母顺序排列的国家名称:", sorted_countries)
(4)日期分析处理。一个8位表示的年月日,如20200220,前4位表示年份,5-6位表示月份,7-8位表示日期。编写程序对日期数据进行处理和分析。
输入格式
第一行输入一个8位长度的日期形式(题目确保输入的字符串只包含0-9的数字,且长度为8位)
第二行输入一个分割符号sign
输出格式
a)根据输入数据中表示年份的数字判断是否为闰年。
b)输出当前月份共有多少天?
c)输出用sign符号分隔的日期输出,例如输入"/",输出2020/09/09。
d)只考虑月份和日期的合法性,判断输入的数字是否为一个合法的日期。
e)输出当前月份的单词和缩写形式
示例:
输入:
20200229
/
输出:
2020年是闰年
2020年2月有29天
2020/02/29
20200229是合法日期
2月英文是February,缩写为Feb.
def is_leap_year(year):
if year % 4 == 0 and (year % 100 != 0 or year % 400 == 0):
return True
else:
return False
year = int(input("请输入年份:"))
if is_leap_year(year):
print(f"{year}年是闰年")
else:
print(f"{year}年不是闰年")
def get_days_in_month(year, month):
months_30 = [4, 6, 9, 11]
months_31 = [1, 3, 5, 7, 8, 10, 12]
if month == 2:
if is_leap_year(year):
return 29
else:
return 28
elif month in months_30:
return 30
elif month in months_31:
return 31
else:
return -1
date = input("请输入日期(YYYYMMDD):")
year = int(date[:4])
month = int(date[4:6])
days = get_days_in_month(year, month)
if days != -1:
print(f"{year}年{month}月共有{days}天")
else:
print("输入的月份无效")
date = input("请输入日期(YYYYMMDD):")
separator = input("请输入日期分隔符:")
year = date[:4]
month = date[4:6]
day = date[6:8]
formatted_date = separator.join([year, month, day])
print(formatted_date)
from datetime import datetime
date = input("请输入日期(YYYYMMDD):")
year = int(date[:4])
month = int(date[4:6])
day = int(date[6:8])
try:
datetime(year, month, day)
print("输入的日期是合法的")
except ValueError:
print("输入的日期是不合法的")
from datetime import datetime
current_date = datetime.now()
month = current_date.month
month_names = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
month_abbreviations = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
month_name = month_names[month - 1]
month_abbreviation = month_abbreviations[month - 1]
print(f"当前月份的英文全称是:{month_name}")
print(f"当前月份的英文缩写是:{month_abbreviation}")
(5)凯撒加密方法可以依据移位的不同产生新的变化,如将每个字母左移19位,就产生这样一个明密对照表(以大写字母为例):(提交学习通)
明:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密:T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
在这个加密表下,明文与密文的对照关系就变成:
明文:THE FAULT, DEAR BRUTUS, LIES NOT IN OUR STARS BUT IN OURSELVES.
密文:MAX YTNEM, WXTK UKNMNL, EBXL GHM BG HNK LMTKL UNM BG HNKLXEOXL.
这样,每改变一个偏移量的数值,就可得到一种不同的加密结果,这种方法可以在一定程度上提升加密强度。某国截获一份情报如下:
Yt gj,tw sty yt gj,ymfy nx f vzjxynts.
根据潜伏的特工传回的消息,知道这份情报的明文中有一个单词是“question”,且采用的是恺撒加密的方法,偏移量未知。请编程计算偏移量,并用得到的偏移量解密读到的密文。
举例:
输入:‘Fyyfhp ts Ujfwq Mfwgtw ts Ijhjrgjw 2, 6496’ (新密文;)
输出: Attack on Pearl Harbor on December 7, 1941 (明文)
import string
def caesar_decrypt(text,offset):
plain_dict={}
for index,letter in enumerate(string.ascii_lowercase):
plain_dict[string.ascii_lowercase[(index+offset)%26]]=letter
for index, letter in enumerate(string.ascii_uppercase):
plain_dict[string.ascii_uppercase[(index + offset) % 26]] = letter
for index, digit in enumerate(string.digits):
plain_dict[string.digits[(index+offset)%10]]=digit
plaintext=''
for char in text:
if char in plain_dict:
plaintext+=plain_dict[char]
else:
plaintext+=char
return plaintext
def find_offset(key_text,ciphertext):
for offset in range(26):
plain_text=caesar_decrypt(ciphertext,offset)
if key_text in plain_text:
return offset
if __name__=='__main__':
key_message='question'
cipher_text='Yt gj,tw sty yt gj,ymfy nx f vzjxynts.'
secret_key=find_offset(key_message,cipher_text)
print(f'偏移量是{secret_key}')
target_text=input()
print(caesar_decrypt(target_text,secret_key))