第六周作业
4.1
target = 425
guess = 0
count = 0
print("猜数字游戏(1-1000)")
print("我已经想好了一个1-1000之间的数字,看你能猜几次猜中!")
while guess != target:
guess = int(input('请输入一个猜测的整数(1-1000): '))
count += 1
if guess > target:
print(f'猜大了!这是你第{count}次猜测')
elif guess < target:
print(f'猜小了!这是你第{count}次猜测')
else:
print(f'恭喜你!猜对了!你一共猜了{count}次')
分析最少需要多少次猜测
min_guesses = 0
n = 1000
while n > 0:
min_guesses += 1
n = n // 2
print(f"\n使用二分查找策略,最少需要{min_guesses}次就能保证猜到任意1-1000的数字")
print("因为2^10=1024>1000,所以最多需要10次二分查找就能找到")
4.2
获取用户输入
s = input("请输入一行字符:")
初始化计数器
letters = 0 # 英文字符
digits = 0 # 数字
spaces = 0 # 空格
others = 0 # 其他字符
遍历字符串并统计
for char in s:
if char.isalpha(): # 判断是否为字母
letters += 1
elif char.isdigit(): # 判断是否为数字
digits += 1
elif char.isspace(): # 判断是否为空白字符
spaces += 1
else: # 其他字符
others += 1
输出结果
print(f"英文字符:{letters}个")
print(f"数字字符:{digits}个")
print(f"空格字符:{spaces}个")
print(f"其他字符:{others}个")
4.3
获取用户输入的两个整数
num1 = int(input("请输入第一个整数:"))
num2 = int(input("请输入第二个整数:"))
计算最大公约数(GCD)
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
计算最小公倍数(LCM)
def lcm(a, b):
return a * b // gcd(a, b)
计算并输出结果
gcd_result = gcd(num1, num2)
lcm_result = lcm(num1, num2)
print(f"数字 {num1} 和 {num2} 的最大公约数是:{gcd_result}")
print(f"数字 {num1} 和 {num2} 的最小公倍数是:{lcm_result}")
4.4
import random
随机生成目标数字(0-1000)
target = random.randint(0, 1000)
guess = None
count = 0
print("猜数字游戏(0-1000)")
print("我已经想好了一个0-1000之间的数字,看你能猜几次猜中!")
while guess != target:
try:
guess = int(input('请输入一个猜测的整数(0-1000): '))
count += 1
if guess < 0 or guess > 1000:
print("请输入0-1000之间的数字!")
continue
if guess > target:
print('猜大了')
elif guess < target:
print('猜小了')
else:
print(f'恭喜你!猜对了!你一共猜了{count}次')
except ValueError:
print("请输入有效的整数!")
分析最少需要多少次猜测
min_guesses = 0
n = 1000
while n > 0:
min_guesses += 1
n = n // 2
print(f"\n提示:使用二分查找策略,最少需要{min_guesses}次就能保证猜到任意0-1000的数字")
4.5
import random
随机生成目标数字(0-1000)
target = random.randint(0, 1000)
guess = None
count = 0
print("猜数字游戏(0-1000)")
print("我已经想好了一个0-1000之间的数字,看你能猜几次猜中!")
while True:
user_input = input('请输入一个整数(0-1000): ')
# 验证输入是否为整数
if not user_input.lstrip('-').isdigit():
print("输入内容必须为整数!")
continue
guess = int(user_input)
count += 1
# 验证数字范围
if guess < 0 or guess > 1000:
print("请输入0-1000之间的数字!")
continue
# 判断猜测结果
if guess > target:
print('猜大了')
elif guess < target:
print('猜小了')
else:
print(f'恭喜你!猜对了!你一共猜了{count}次')
break
分析最少需要多少次猜测
min_guesses = 0
n = 1000
while n > 0:
min_guesses += 1
n = n // 2
print(f"\n提示:使用二分查找策略,最少需要{min_guesses}次就能保证猜到任意0-1000的数字")
4.6
year = int(input("请输入一个年份:"))
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
print(f"{year}年是闰年")
else:
print(f"{year}年不是闰年")
4.7
def get_valid_integer():
"""获取用户输入的合规整数"""
while True:
user_input = input("请输入一个十进制整数:")
# 验证输入是否为纯数字(允许正负号)
if (user_input.lstrip('-+').isdigit() and # 数字检查
len(user_input) == len(user_input.lstrip('-+')) + (1 if user_input.startswith(('-', '+')) else 0)): # 符号检查
try:
number = int(user_input)
return number
except ValueError:
print("输入转换失败,请重试!")
else:
print("输入格式错误!请确保输入的是纯数字整数(如123、-456等),不要包含其他字符。")
使用示例
valid_integer = get_valid_integer()
print(f"您输入的合规整数是:{valid_integer}")
4.8
import re
def is_valid_float(input_str):
"""验证是否为合规的小数格式"""
pattern = r'[1]?[0-9]*.?[0-9]+$'
return bool(re.fullmatch(pattern, input_str))
while True:
user_input = input("请输入一个浮点数(不接受科学计数法):")
if is_valid_float(user_input):
try:
number = float(user_input)
print(f"您输入的合规浮点数是:{number}")
break
except:
print("输入转换失败,请重试!")
else:
print("输入格式错误!请确保输入的是标准小数格式(如3.14、-0.5等),不要使用科学计数法。")
-+ ↩︎

浙公网安备 33010602011771号